Java 模拟算法实战
模拟算法的核心在于严格按照题目描述进行步骤操作。这类问题通常逻辑直观,但容易在边界条件和细节处理上出错。下面通过五道经典题目,梳理一下模拟算法的常见套路和注意事项。
替换所有的问号
题目核心
将字符串中的 ? 替换为小写字母,要求替换后的字符不能与相邻字符重复。
思路解析
遍历字符串,遇到 ? 时尝试从 a 到 z 寻找一个不与左右邻居冲突的字符。这里有两个关键点:一是边界情况(首尾字符),二是确保找到的字符唯一且合法。
class Solution {
public String modifyString(String s) {
int n = s.length();
char[] chars = s.toCharArray();
for (int i = 0; i < n; i++) {
if (chars[i] == '?') {
// 尝试 a-z 找到合适的字符
for (char ch = 'a'; ch <= 'z'; ch++) {
// 检查左邻居和右邻居
boolean leftOk = (i == 0 || chars[i - 1] != ch);
boolean rightOk = (i == n - 1 || chars[i + 1] != ch);
if (leftOk && rightOk) {
chars[i] = ch;
break;
}
}
}
}
return (chars);
}
}


