A - Beautiful String

题意:给你一串只含a、b、c、?的字符串s,?可以换成a/b/c,要求两两相邻不能相同,如果存在则输出任一种,否则输出-1;

思路:(只有当所给的字符串含两个相邻相同的这种情况才会输出-1)

   循环走到s[i]==‘?’的时候,先与s[i-1]做比较,s[i]=(s[i-1]-'a'+1)%3+'a',往后移一个,如果第一个就为?,则直接存a;再和s[i+1]做比较,如果s[i]==s[i+1],

那么s[i]=(s[i]-'a'+1)%3+'a',再往后移一个。

#include<bits/stdc++.h>
#define N 1e5+10
using namespace std;
int main(){
        int t,i,flag;
        char s[int(N)];
        while(~scanf("%d%*c",&t)){
                while(t--){
                        gets(s);
                        for(i=0;s[i]!='\0';i++){
                                if(s[i]=='?'){
                                        if(i!=0){
                                                s[i]=(s[i-1]-'a'+1)%3+'a';
                                        }else{
                                                s[i]='a';
                                        }
                                        if(s[i+1]==s[i]){
                                                s[i]=(s[i]-'a'+1)%3+'a';
                                        }
                                }
                        }
                        for(i=flag=0;i<strlen(s)-1;i++){
                                if(s[i]==s[i+1])
                                       flag=1;
                        }
                        if(flag==1)
                                printf("-1\n");
                        else printf("%s\n",s);
                }
        }
}
View Code

   

猜你喜欢

转载自www.cnblogs.com/DreamingBetter/p/12197701.html