leetcode 1576 替换所有的问号

一、题目描述

二、解题思路

本题可以通过模拟的方法来解决。

遍历字符串,若找到"?"则进行合法替换,有如下几种情况:

(1)i==0且s.size()==1,表示字符串为"?",直接将"?"替换成"a"即可;

(2)除此之外,如果i==0,则代表该位置为字符串的开头,循环使得r!=si+1,进行替换;

(3)如果i==s.size()-1,表示该位置为字符串的结尾,循环使得r!=si-1,进行替换;

(4)如果替换的位置在字符串的中间,则循环使得r!=si-1且r!=si+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;
    }
};
相关推荐
机器人零零壹25 分钟前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
布莱克6052 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
ZhengEnCi3 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是4 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考4 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
沫璃染墨6 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
nm_zfyjt6 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
xiaoye-duck7 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
w_zero_one8 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼8 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php