算法日常・每日刷题--<模拟>1

https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/

一、题目简介

给你一个只包含小写字母和 ? 的字符串 s,要求把所有 ? 替换成小写字母,使得最终字符串 没有任意两个连续字符相同

题目保证一定有合法解,只需要返回任意一种合法结果。

核心难点:正确处理首尾边界 + 不能和左右字符重复

二、我的解题思路

整体思路非常朴素:遍历字符串,遇到问号就尝试填充字母

1.看字符是否和该位置的前一个和后一个是否相同

如果相同就继续遍历,

如果不相同将该字符赋值给该位置

2.要处理边界情况

如果该位置是s0->前一个位置不用进行比较

如果该位置是ss.size()-1->后一个位置不用进行比较

cpp 复制代码
class Solution {
public:
    string modifyString(string s) {
       for(int i=0;i<s.size();i++)
       {
         if(s[i]=='?')
         {
            for(char j='a';j<='z';j++)
            {   
                if(((i==0)||j!=s[i-1])&&((i==s.size()-1)||s[i+1]!=j))
                {
                s[i]=j;
                break;
                }
            }
         }
       }
       return s;
    }
};