是否可以删除一个字母之后变成回文串

题目描述

给出一个字符串,仅由小写字母组成。请找出是否仅删除其中的一个字母之后, 字符串变成回文串。


输入

输入第一行是一个整数 T,表示有 组数据。 每组数据占一行,每行包含一个非空字符串,字符串长度不超过 10

 

输出

对于每组测试数据,输出一行包含一个整数 ,表示删除字符串中第 个字 母后字符串变成回文串。若有多个这样的整数 存在,则输出其中最小的一个 整数。如果输入的字符串原本就是一个回文串,或者找不到这样的整数,则输出 "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
*/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值