Codeforces Round #604 (Div. 2) A. Beautiful String

【题目链接】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');
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值