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