模拟算法核心思路
模拟类题目是算法面试中的常客。这类题目的特点在于,题目通常会明确给出操作流程或规则,我们的任务就是忠实还原这个过程。核心步骤很简单:先理清逻辑流程,再将其转化为代码实现。
1576. 替换所有的问号
问题描述:
给定一个字符串,其中包含小写字母和问号 ?。要求将所有问号替换为小写字母,使得相邻字符不相等。
思路分析:
直接模拟题目要求的替换过程。遍历字符串,遇到 ? 时,从 a 到 z 尝试填充,只要该字符与前后邻居不同即可。需要注意边界情况:如果 ? 在开头,只需检查后一个字符;如果在结尾,只需检查前一个字符。
代码实现:
class Solution {
public String modifyString(String s) {
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '?') {
for (char ch = 'a'; ch <= 'z'; ch++) {
// 检查前驱和后继,确保不冲突
boolean prevOk = (i == 0 || chars[i - 1] != ch);
boolean nextOk = (i == chars.length - 1 || chars[i + 1] != ch);
if (prevOk && nextOk) {
chars[i] = ch;
break;
}
}
}
}
return new String(chars);
}
}


