题目地址
难度:⭐
题目描述:
给你一个仅包含小写英文字母和 '?'
字符的字符串 s
,请你将所有的 '?'
转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 '?'
字符。
题目测试用例保证 除 '?'
字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。
示例1:
1 2 3
| 输入:s = "?zs" 输出:"azs" 解释:该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合题目要求的。只有 "z" 是无效的修改,因为字符串 "zzs" 中有连续重复的两个 'z' 。
|
示例2:
1 2 3
| 输入:s = "ubv?w" 输出:"ubvaw" 解释:该示例共有 24 种解决方案,只有替换成 "v" 和 "w" 不符合题目要求。因为 "ubvvw" 和 "ubvww" 都包含连续重复的字符。
|
示例3:
1 2
| 输入:s = "j?qg??b" 输出:"jaqgacb"
|
示例4:
1 2
| 输入:s = "??yw?ipkj?" 输出:"acywaipkja"
|
提示:
1 <= s.length <= 100
s
仅包含小写英文字母和 '?'
字符
🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️解题过程🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️
解题过程:
思路:遍历字符串,对其中的’?’字符从’a’开始替换,然后和前后字符进行比较若重复则当前字符加1换成下一个字符。
c++代码:(执行用时0ms,击败100.00%,内存消耗6M,击败54.83%)
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 30 31 32 33 34 35
| class Solution { public: string modifyString(string s) { int n=s.length(); char tmp='a'; if(n==1 && s[0]=='?'){ return "a"; } if(s[0]=='?'){ s[0]='a'; if(s[1]=='a'){ s[0]++; } } if(s[n-1]=='?'){ s[n-1]='a'; if(s[n-2]=='a'){ s[n-1]++; } } for(int i=1;i<n-1;i++){ if(s[i]=='?'){ tmp='a'; while(s[i-1]==tmp || s[i+1]==tmp){ tmp++; } s[i]=tmp; } } return s; } };
|
简化了一下代码如下:
c++代码:(执行用时0ms,击败100.00%,内存消耗6M,击败60.83%)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public: string modifyString(string s) { int n=s.length(); char tmp='a'; if(n==1 && s[0]=='?'){ return "a"; } for(int i=0;i<n;i++){ if(s[i]=='?'){ tmp='a'; while(i-1>=0&&s[i-1]==tmp || i+1<n&&s[i+1]==tmp){ tmp++; } s[i]=tmp; } } return s; } };
|
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:
没有官方题解,简单😃。