算法模拟实战:替换问号、提莫攻击与 Z 字形变换
38. 替换所有问号
题目描述

题目示例

核心思路
这道题的逻辑非常直观,本质上就是遍历字符串并做局部替换。遇到 ? 时,我们需要从 a 到 z 逐个尝试字符,直到找到一个既不与左边邻居重复,也不与右边邻居重复的字符为止。
需要注意的是边界情况:如果 ? 在字符串开头或结尾,只需要检查一侧的邻居即可。
参考实现
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;
}
};
解题思路图解









