这道题对我最大的问题是判断后面的?对前面的?没有影响,即前面的决策没有后效性。
#include<iostream>
using namespace std;
int n;
bool ok;
string s;
int main(){
cin>>n;
while(n--){
cin>>s;
ok=false;
if(s[0]=='?')
{
if(s[1]!='a')
s[0]='a';else
if(s[1]!='b')
s[0]='b';else
if(s[1]!='c')
s[0]='c';
}
for(int i=0;i<s.length();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';
}
if(i<s.length()-1){
if(s[i]==s[i+1])
ok=true;
}
}
if(ok){
cout<<"-1"<<endl;
}
else
cout<<s<<endl;
}
return 0;
}