做法:所有的问号都赋成'a' 如果是回文 把最后一个问号(且不能奇数长度串在正中间) 改成'b'即可 如果没法改 就是非法状态
至于原因,首先 上述做法显然满足得到的答案是字典序最小的
其次如果改动前是回文串了 那改动最后一个问号(非中间)后就肯定不是回文串了。
而对于在最中间的问号肯定取'a' 取别的字母对其他位置的取值是没有影响的 而结果却会增大。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
#include<set>
#define scnaf scanf
#define cahr char
#define bug puts("bugbugbug");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int mod=1e9+7;
const int maxn=2e5+100;
const int inf=1e9;
int n;
char a[1005];
bool hui()
{
for(int i=0;i<n;i++)
{
if(a[i]!=a[n-i-1])return 0;
}
return 1;
}
int main()
{
while(~scanf("%d",&n))
{
scanf("%s",a);
int id=-1;
for(int i=0;i<n;i++)
if(a[i]=='?')
{
a[i]='a';
if(n%2&&i==n/2) continue;
id=i;
}
if(hui())
{
if(id==-1){
puts("QwQ");
continue;
}
a[id]='b';
}
puts(a);
}
}