相关题解
1. 替换所有的问号
算法思路:
模拟。从前往后遍历整个字符串,找到问号后,用 a~z 的每一个字符尝试替换即可。
class Solution {
public:
string modifyString(string s) {
int n = s.size();
for (int i = 0; i < n; i++) {
if (s[i] == '?') {
for (char ch = 'a'; ch <= 'z'; ch++) {
if ((i == 0 || ch != s[i - 1]) && (i == n - 1 || ch != s[i + 1])) {
s[i] = ch;
break;
}
}
}
}
return s;
}
};
2. 提莫攻击
算法思路:
模拟 + 分情况讨论。
计算相邻两个时间点的差值:
- 若差值大于等于中毒时间,说明上次中毒可以持续 duration 秒;
- 若差值小于中毒时间,说明此时发生了中毒叠加,那么上次的中毒只能持续两者的差值。
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int ret = 0;
for (int i = 1; i < timeSeries.size(); i++) {
x = timeSeries[i] - timeSeries[i - ];
(x <= duration) ret += x;
ret += duration;
}
ret + duration;
}
};

