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)

cpp 复制代码
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;
    }
};
相关推荐
侯小啾7 分钟前
【23】C语言 左移(<<) 与 右移(>>) 位运算符在处理像素中的应用
c语言·算法·位运算·右移·左移
搂鱼11451416 分钟前
(dp 优化)洛谷 P14460 寻雾启示 题解
算法·图论
阿林学习计算机24 分钟前
C++11特性
c++
_OP_CHEN28 分钟前
算法基础篇:(十一)贪心算法拓展之区间问题:从重叠到覆盖的最优解艺术
算法·贪心算法
Elias不吃糖1 小时前
NebulaChat:C++ 高并发聊天室服务端
开发语言·c++·redis·sql·项目文档
帅中的小灰灰1 小时前
C++编程策略设计模式
开发语言·c++·设计模式
钟智强1 小时前
线性映射(Linear Mapping)原理详解:机器学习中的数学基石
人工智能·算法·机器学习
是小胡嘛2 小时前
华为云CentOS系统中运行http服务器无响应
linux·服务器·c++·http·centos·华为云
福尔摩斯张3 小时前
C语言核心:string函数族处理与递归实战
c语言·开发语言·数据结构·c++·算法·c#
2501_941884613 小时前
云计算与边缘计算:解锁未来计算架构的智能边界
leetcode