题目传送门
题目意思:
给你一个带有 a
、b
、c
、?
这些字符的字符串。你可以吧 ?
改成 a
、b
或 c
。要求改完的字符串相邻的字符不能相同。
思路:
- 先判断当前字符串是否合法。
- 如果合法就直接模拟任意一个答案即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
string a;
bool f()
{//判断合法
for(int i=1;i<a.size();i++)
if(a[i]==a[i-1]&&a[i]!='?')
return true;
return false;
}
char calc(int id)
{//模拟答案
if(id-1==-1)
{
if(a[id+1]=='a')return 'b';
if(a[id+1]=='b')return 'c';
if(a[id+1]=='c')return 'a';
return 'a';
}
if(a[id-1]=='a')
{
if(a[id+1]=='b')return 'c';
if(a[id+1]=='c')return 'b';
return 'c';
}
if(a[id-1]=='b')
{
if(a[id+1]=='a')return 'c';
if(a[id+1]=='c')return 'a';
return 'a';
}
if(a[id-1]=='c')
{
if(a[id+1]=='a')return 'b';
if(a[id+1]=='b')return 'a';
return 'b';
}
}
int main()
{
cin>>n;
while(n--)
{
cin>>a;
if(f())
{//判断是否合法
cout<<-1<<endl;
continue;
}
for(int i=0;i<a.size();i++)
{
if(a[i]=='?')
{
a[i]=calc(i);//模拟任意一个答案
}
}
cout<<a<<endl;
}
return 0;
}
完美撒花~