题目描述
给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”,”bob”,”testset”是回文串,”alice”,”time”都不是回文串。
输入
一行一个有小写字母构成的字符串,字符串长度不超过10。
样例输入
coco
输出
如果输入字符串可以通过添加一个字符,则输出”YES”,否则输出”NO”。
样例输出
YES
代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[10];
cin>>a;
int count=0,flag=0;int s1,s2;
for(int i=0,j=strlen(a)-1;i<strlen(a)/2 && j>strlen(a)/2;)
{
if(a[i]==a[j])//如果相等,相安无事
{
i++,j--;
continue;
}
else //如果不相等,有两种加法,一个是在前半段字符串加,一个是在后半段字符串加
{//所谓的加法就是可以忽略一个字符,继续比对后面的字符即可
if(flag==1)
break;
if(count!=1)
{
s1=i;//记录下来出事的位置
s2=j;
count++;
i++;
continue;
}else
{
i=s1;//说明在前半段字符串加不行,i和j回溯到出事的位置
j=s2;
count = 0;//重置count
j--;
flag=1;//两种都尝试了
}
}
}
if(flag==1)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
return 0;
}