题目描述
给出一个字符串,仅由小写字母组成。请找出是否仅删除其中的一个字母之后, 字符串变成回文串。
输入
输入第一行是一个整数 T,表示有 T 组数据。 每组数据占一行,每行包含一个非空字符串,字符串长度不超过 105 。
输出
对于每组测试数据,输出一行包含一个整数 K ,表示删除字符串中第 K 个字 母后字符串变成回文串。若有多个这样的整数 K 存在,则输出其中最小的一个 整数。如果输入的字符串原本就是一个回文串,或者找不到这样的整数,则输出 "No Solution" (不包含引号)。
样例输入
<span class="sampledata" style="font-family: monospace; font-size: 18px; white-space: pre; background-color: rgb(141, 184, 255);">3 aaab abab abcba</span>
样例输出
<span class="sampledata" style="font-family: monospace; font-size: 18px; white-space: pre; background-color: rgb(141, 184, 255);">4 1 No Solution</span>
int main(){
int t;
cin>>t;
while(t--){
string x;
cin>>x;
int l=0,r=x.length()-1;
int minn=100000000;
while(l<r){
if(x[l]!=x[r]){
if(x[l+1]==x[r]){
int u=0;
int p=l+1,q=r;
while(p<q){
if(x[p]!=x[q]){
u=1;
break;
}
p++;
q--;
}
if(u==0){
p=l; //这里注意
while(p-1>=0&&x[p-1]==x[p]) //这里注意
p--; //这里注意
minn=min(minn,p);
}
}
if(x[l]==x[r-1]){
int u=0;
int p=l,q=r-1;
while(p<q){
if(x[p]!=x[q]){
u=1;
break;
}
p++;
q--;
}
if(u==0)
minn=min(minn,r);
}
break;
}
l++;
r--;
}
if(minn==100000000)
cout<<"No Solution"<<endl;
else
cout<<minn+1<<endl;
}
return 0;
}
/*
2
aabba
aaaabbaaa
*/