【题目】
自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。
这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。
如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?
【输入】
【输出】
【输入样例】
【输出样例】
【题解】
不难看出如果只有1个或者2个字母 就一定是YES 如果本身是回文的 那也一定是YES,如果前两个都不满足 那就从首尾开始依次判断,遇到不相同的位置s[i],s[j]时,判断下s[i]到s[j-1]或者s[i+1]到s[j]是否为回文即可。
#include<bits/stdc++.h>
using namespace std;
string s;
int check(int l,int r)
{
for(int i=l,j=r;i<=j;i++,j--)
if(s[i]!=s[j]) return 0;
return 1;
}
int main()
{
cin>>s;
int l=s.length(),f=0;
int i=0,j=l-1;
if(l<=2) f=1;
else if(check(i,j)) f=1;
else
{
for(;i<j;i++,j--)
if(s[i]!=s[j])
{
if(check(i+1,j)||check(i,j-1)) f=1;
break;
}
}
if(f) puts("Yes");
else puts("No");
return 0;
}