【题目链接】A题链接

【题目类型】模拟

【题目大意】输入一个t表示有t组测试样例。每组测试样例有一个字符串,字符串中含有abc以及?,现在要求你替换字符串中所有的问号,使得字符串满足不会有连续两个一样的字符,如果无法构成则输出-1如果可以构成则输出字符串。

【解题思路】就按照题目的意思去模拟,主要是在于判断这几个位置的?

开头连续 ???abcabc
中间连续 abc???abc
末尾连续 abc???
普通位置的都是比较好判断的 比如a?c中间就是b

还有判断技巧,判断一样不如判断不一样,怎么说呢?看代码

const int maxn = 1e5+50;
char s[maxn];
int main(){
    int t; RD(t);
    REP(T, t){
        scanf("%s", s+1);
        int len = strlen(s+1);
        bool flag = true;
        for(int i = 1; i <= len; i++){
            if(s[i] == '?'){
                if(s[i-1] != 'a'&& s[i+1]!='a'){
                    s[i] = 'a';
                }
                else if (s[i-1] != 'b'&& s[i+1]!='b'){
                    s[i] = 'b';
                }
                else if (s[i-1] != 'c'&& s[i+1] != 'c'){
                    s[i] = 'c';
                }
            }
            else{
                if(s[i] == s[i-1]){
                    flag = false;
                }
            }
        }
        if(!flag)OT(-1), OT('\n');
        else{
            for(int i = 1; i <= len; i++){
                OT(s[i]);
            }
            OT('\n');
        }

    }

}