元旦假期玩的嗨的不行,该收收心回来继续做题了~老规矩先上链接。
力扣1576替换所有的问号https://leetcode-cn.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters/今天是个简单题,思路上也很简单,注意以下开头和结尾的特殊情况,以及连续多个?相连的情况即可。代码如下:
package cn.daycode.leetcode;
public class ModifyString {
public static void main(String[] args) {
Solution s = new Solution();
String str = "?????????????????";
System.out.println(s.modifyString(str));
}
static class Solution {
public String modifyString(String s) {
StringBuilder res = new StringBuilder("");
// 遍历字符串s,如果某一位不是'?'就拼接到res后面,是s则进入判断
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '?'){
char[] temp = new char[2];
char c = 'a';
// 不是首位,就把替换后的前一位字符填入临时数组的第一个位置
if (i>0){
temp[0] = res.charAt(i-1);
}
// 不是尾位,就把后面一个字符填入临时数组的第二个位置
if (i<s.length()-1){
temp[1] = s.charAt(i+1);
}
// 从a开始的26个字母找跟前后(如果存在)都不同的字母拼接到res后
for (int j = 0;; j++) {
if (c+j !=temp[0] && c+j != temp[1]){
res.append((char)(c+j));
break;
}
}
}else {
// 不是'?'就直接拼接
res.append(s.charAt(i));
}
}
return res.toString();
}
}
}