外观
传播生气
⭐ 题目日期:
拼多多 - 2024/10/19
🌳 题目描述:
一群人排队,生气为A,不生气为P,每分钟生气传播,生气的人会把后面不生气的人变生气,问最后一个人变生气的时间
示例 1:
输入: "AAPPA"
输出: 2
解释:
- 第 0 分钟,状态为 A A P P A
- 第 1 分钟,生气传播后,状态为 A A A P A
- 第 2 分钟,生气传播后,状态为 A A A A A
最后一个人在第 2 分钟变生气。
示例 2:
输入: "PA"
输出: 0
解释:
- 没有人会从不生气变为生气
🧗难度系数:
⭐️ ⭐️
📝思路分析:
生气只会向后传播,最后一个生气的人一定是最长连续没有生气的人中的最后一个人,前提是前面得有一个人生气。
如:PPPPPPPAA, 我们能找到最长连续没有生气的人群,但是因为前面没有人生气,所以没有人传播生气,最终返回 0。因此,我们需要一个变量来记录最近生气的人的位置,从而计算出从当前没生气的人到最近生气的人之间一共有多少没生气的,再更新最大值。
💻代码:
Java
public int lastToBeAngry(String mood) {
if (mood == null || mood.length() <= 1) {
return -1;
}
int result = 0;
int indexOfAngryPeopleFront = -1;
for (int i = 0; i < mood.length(); i++) {
if (mood.charAt(i) == 'A') {
indexOfAngryPeopleFront = i;
} else if (indexOfAngryPeopleFront > -1) {
result = Math.max(result, i - indexOfAngryPeopleFront);
}
}
return result;
}
🚵🏻复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)