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;
    }
};
相关推荐
666HZ6661 小时前
数据结构2.0 线性表
c语言·数据结构·算法
SmartRadio1 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
西伯利亚狼_J20201 小时前
260109introduceEN
职场和发展
实心儿儿2 小时前
Linux —— 基础开发工具5
linux·运维·算法
charlie1145141912 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
清木铎4 小时前
leetcode_day4_筑基期_《绝境求生》
算法
清木铎4 小时前
leetcode_day10_筑基期_《绝境求生》
算法
j_jiajia4 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
源代码•宸4 小时前
Golang语法进阶(协程池、反射)
开发语言·经验分享·后端·算法·golang·反射·协程池
我命由我123455 小时前
Photoshop - Photoshop 工具栏(57)模糊工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop