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