2024快手面试算法题-生气传染
问题描述
思路分析
生气只会向后传播,最后一个生气的人一定是最长连续没有生气的人中的最后一个人,前提是前面得有一个人生气。
注意,一次只能传播一个人,比如示例1,第一次只会传播给第一个P,不会传播给第二个P,了解这个之后,我们再将这个问题进行转化
最后一个P变生气,是由离他最近的A传染的,所以最后一个P变生气的时间,就是最后一个P和离他最近的A的距离
所以我们只要记录离最后一个P最近的A的位置,和最后一个P的位置,两个位置相减就是答案
代码实现
public class KsInternShip {
//思路 最后一个p变生气,是由他前面最近的一个A引起的
//所以最后一个p变成A的时间,就是最后一个P和最近的A的距离
public int lastToBeAngry(String mood) {
if(mood == null || mood.length() <= 1) {
return -1;
}
int lastIndex = 0, res = 0, len = mood.length();
for(int i = 0; i < len; i++) {
if(mood.charAt(i) == 'A') {
lastIndex = i;
}else {
res = Math.max(res,i - lastIndex);
}
}
return res;
}
}
相似题目
洛谷的一道相似题:Angry Students - 洛谷