38. 替换所有问号
题目描述

解题思路
这道题的核心在于模拟替换过程。我们需要遍历字符串,当遇到问号时,尝试用 'a' 到 'z' 的字符进行填充。关键约束是填充后的字符不能与其前一个或后一个字符相同。
注意边界情况:如果问号在字符串开头,只需检查下一个字符;如果在末尾,只需检查前一个字符。由于字母表有 26 个字符,且最多只有两个邻居,必然存在至少一个合法字符可用。
C++ 实现
class Solution {
public:
string modifyString(string s) {
for(int i = 0; i < s.size(); i++) {
if(s[i] == '?') {
for(char c = 'a'; c <= 'z'; c++) {
// 检查左右邻居是否冲突
if((i == 0 || s[i - 1] != c) &&
(i == s.size() - 1 || s[i + 1] != c)) {
s[i] = c;
break;
}
}
}
}
return s;
}
};
39. 提莫攻击
题目描述

解题思路
这是一个典型的区间合并问题,可以通过模拟中毒状态的时间线来解决。
核心逻辑是计算相邻两次攻击的时间差:



