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;
    }
};
相关推荐
abluckyboy19 分钟前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异24 分钟前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_7066532326 分钟前
分布式系统安全通信
开发语言·c++·算法
Zach_yuan41 分钟前
深入浅出 JSONCpp
linux·服务器·网络·c++
寻寻觅觅☆1 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx1 小时前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
天天爱吃肉82181 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao2 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习2 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
阿猿收手吧!2 小时前
【C++】string_view:高效字符串处理指南
开发语言·c++