leetcode 1576 替换所有的问号
一、题目描述
二、解题思路
本题可以通过模拟的方法来解决。
遍历字符串,若找到"?"则进行合法替换,有如下几种情况:
(1)i==0且s.size()==1,表示字符串为“?”,直接将“?”替换成“a”即可;
(2)除此之外,如果i==0,则代表该位置为字符串的开头,循环使得r!=s[i+1],进行替换;
(3)如果i==s.size()-1,表示该位置为字符串的结尾,循环使得r!=s[i-1],进行替换;
(4)如果替换的位置在字符串的中间,则循环使得r!=s[i-1]且r!=s[i+1],进行替换。
注意:在替换完后一定要break跳出循环,否则会陷入死循环。
三、代码实现
时间复杂度:T(n)=O(n)
空间复杂度:S(n)=O(1)
class Solution {
public:string modifyString(string s) {//判断每一个位置是不是"?"for(int i=0;i!=s.size();i++){if(s[i]=='?'){//替换掉每一个"?"if(s.size()==1) s[i]='a';for(char r='a';r<='z';r++){if((i==0)&&(r!=s[i+1])) {s[i]=r;break;}else if((i==s.size()-1)&&(r!=s[i-1])) {s[i]=r;break;}else if((i!=0)&&(i!=s.size()-1)&&(r!=s[i-1])&&(r!=s[i+1])) {s[i]=r;break;}}}}return s;}
};