039 替换所有的问号
题目描述:
给定一个字符串 s,其中包含小写字母和问号 '?'。你需要将所有的 '?' 替换为小写字母,使得最终结果中不包含两个相邻的相同字符。
1.1 解法:模拟的思想
纯模拟。从前往后遍历整个字符串,找到问号之后,就用 'a'~'z' 的每一个字符去尝试替换即可。
1.2 算法实现
class Solution {
public:
string modifyString(string s) {
for (int i = 0; i < s.size(); i++) {
if (s[i] == '?') {
// 替换
for (char ch = 'a'; ch <= 'z'; ch++) {
if ((i == 0 || ch != s[i - 1]) && (i == s.size() - 1 || ch != s[i + 1])) {
s[i] = ch;
break;
}
}
}
}
return s;
}
};
040 提莫攻击
题目描述:
在《英雄联盟》的世界中,提莫的攻击可以让艾希中毒。如果提莫在时刻 t 发起攻击,艾希将在 duration 秒内处于中毒状态。如果在中毒期间再次发起攻击,则重置中毒计时器。给定攻击时间序列 timeSeries 和中毒持续时间 duration,计算艾希总共处于中毒状态的秒数。
2.1 解法:模拟 + 分情况讨论
思路:模拟 + 分情况讨论。 我们只要计算相邻两个时间点的差值即可:
- 如果差值大于等于中毒时间,说明上次中毒可以持续 duration 秒;
- 如果差值小于中毒时间,那么上次的中毒只能持续两者的差值。
2.2 算法实现
class Solution {
public:
int findPoisonedDuration {
ret = ;
n = timeSeries.();
( i = ; i < n; i++) {
x = timeSeries[i] - timeSeries[i - ];
(x >= duration) {
ret += duration;
} {
ret += x;
}
}
ret + duration;
}
};


