Java 模拟算法实战:LeetCode 经典题解与思路
模拟算法的核心在于按照题目描述的规则,一步一步地执行操作。这类题目通常逻辑直观,但难点往往隐藏在边界条件和细节处理上。下面我们通过五个经典的 LeetCode 题目,来梳理模拟算法的常见套路。
替换所有的问号
题目分析:将字符串 s 中的 ? 全部替换成小写字母,要求替换后的字符不能与其相邻的两个字符相同。
解题思路:遍历字符串,遇到 ? 时尝试从 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] == '?') {
// 找一个符合条件的字母替换
for (char ch = 'a'; ch <= 'z'; ch++) {
// 注意最左边和最右边这两个边界情况
boolean leftOk = (i == 0 || chars[i - 1] != ch);
boolean rightOk = (i == n - 1 || chars[i + 1] != ch);
(leftOk && rightOk) {
chars[i] = ch;
;
}
}
}
}
(chars);
}
}








