每日一题:替换问号

本文介绍了一道编程题目,要求在给定的字符串中将所有'?'字符转换为小写字母,使得转换后的字符串不包含任何连续重复的字符。通过遍历字符串并使用'a', 'b', 'c'这三个字母替换'?',确保不与相邻字符重复,实现了问题的解决方案。算法的时间复杂度为O(n),空间复杂度为O(1)。
摘要由CSDN通过智能技术生成

题目1:
给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 ‘?’ 字符。
题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。

在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。

输入:s = “ubv?w”
输出:“ubvaw”
解释:该示例共有 24 种解决方案,只有替换成 “v” 和 “w” 不符合题目要求。因为 “ubvvw” 和 “ubvww” 都包含连续重复的字符。

题目要求将字符串 s 中的 ‘?’ 转换为若干小写字母,转换后的字母与该字母的前后字母均不相同。遍历字符串 s,如果遇到第 ii 个字符 s[i]为‘?’ 时,此时直接在英文字母 ‘a’-‘z’ 中找到一个与s[i−1] 和s[i+1] 均不相同的字母进行替换即可。
在替换时,实际不需要遍历所有的小写字母,只需要遍历三个互不相同的字母,就能保证一定找到一个与前后字符均不相同的字母,在此我们可以限定三个不同的字母为 (‘a’,‘b’,‘c’)
**

时间复杂度:O(C \times n)O(C×n),其中 nn 是字符串的长度,我们需要遍历一遍字符串,CC 表示可替代字符的数量,在本题中 C=3C=3。
空间复杂度:O(1)O(1)。除了函数返回值以外我们不需要再申请额外的空间。

class Solution {
public:
string modifyString(string s) {
for(int i=0;i<s.size();i++)
{
if(s[i]==’?’)
{
for(char ch=‘a’;ch<‘d’;ch++)
{
if((i>0 && s[i-1]==ch )|| (i<s.size()-1 && s[i+1]==ch))
{
continue;
}
s[i]=ch;
break;
//记住要用break 终止for循环
}
}
}
return s;
}
};


 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值