模拟算法
模拟算法的核心在于严格按照题目描述进行一步步操作。这类题目通常逻辑直观,但容易在边界条件和细节上出错。掌握模拟算法的关键是处理好各种特殊情况,比如数组越界、空值判断以及状态流转的完整性。
替换所有的问号
题目: 将字符串 s 中的 ? 全部替换成小写字母,且替换后的字符不能与相邻字符重复。

思路解析: 我们需要遍历字符串,找到所有的问号。对于每个问号,尝试用 'a' 到 'z' 之间的字母替换。选择字母时,必须确保它不等于左边邻居(如果存在)也不等于右边邻居(如果存在)。由于只有三个字符需要避开(左、右、自身),而字母表有 26 个,所以总能找到一个合法的字符。
class Solution {
public String modifyString(String s) {
int n = s.length();
char[] arr = s.toCharArray();
for (int i = 0; i < n; i++) {
if (arr[i] == '?') {
// 尝试 a-z 寻找不冲突的字符
for (char ch = 'a'; ch <= 'z'; ch++) {
// 检查左右邻居,注意边界情况
boolean leftOk = (i == 0 || arr[i - 1] != ch);
boolean rightOk = (i == n - 1 || arr[i + 1] != ch);
if (leftOk && rightOk) {
arr[i] = ch;
;
}
}
}
}
(arr);
}
}






