05 August 2008
给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
思路:转为数组方便遍历操作.
如果遇到当前的i为?,则对其进行修改成与前后都不相同的即可
修改的值可以是前一个+1,这样可以保证不与前一个重复。
如果修改了与后一个重复,那么在修改一次即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public String modifyString(String s) {
char[] arr =s.toCharArray();
int len = s.length();
//处理第一个
if (arr[0] == '?') {//是?才处理
if (len > 1) { //注意范围,如果超过1
arr[0] = arr[1] == 'a' ? 'b' : 'a';
}else{
arr[0] = 'a';
}
}
for(int i =1;i<len;i++){
if(arr[i]=='?'){ //是?才处理
if (i + 1 < len) { //处理中间,如果前一个不为z,那我就对?赋值为前一个的下一个
arr[i] = arr[i-1]=='z'? 'a':(char) (arr[i - 1] + 1);
if (arr[i] == arr[i + 1]) {//如果我操作后与后一个一样了,那我再操作一次
arr[i] = arr[i + 1] == 'z' ? 'a' : (char) (arr[i + 1] + 1);
}
} else { //处理最后一个,同理
arr[len - 1] = arr[len - 2] == 'z' ? 'a' : (char) (arr[len - 2] + 1);
}
}
}
return String.valueOf(arr);
}
}