39. 替换所有问号
题目链接:
题目描述:

题目示例:

解法(模拟)
思路分析
这道题的核心在于模拟替换过程。我们需要遍历字符串,一旦遇到问号 ?,就尝试用 a 到 z 的字符去填充。关键约束是:替换后的字符不能与前一个字符或后一个字符相同。
具体逻辑如下:
- 从左到右扫描字符串。
- 当发现
s[i] == '?'时,从'a'开始循环尝试。 - 检查当前候选字符是否与
s[i-1](如果存在)和s[i+1](如果存在)冲突。 - 找到第一个不冲突的字符,填入并跳出内层循环,继续处理下一个位置。
注意边界情况:如果是首字符,只需检查后一个;如果是尾字符,只需检查前一个。
C++ 代码实现
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 == || ch != s[i - ]) &&
(i == n - || ch != s[i + ])) {
s[i] = ch;
;
}
}
}
}
s;
}
};






