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); } } }