链接:https://ac.nowcoder.com/acm/contest/330/I
来源:牛客网
 

自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。


这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。

如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?

输入描述:

仅一行,为一个由字母和数字组成的字符串 s。

输出描述:

如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。

示例1

输入

复制

applese

输出

复制

No

示例2

输入

复制

java

输出

复制

Yes

备注:

|s|≤

题目中说添加一个能否构成回文串,那么删除一个也等价。

如本身是回文串,那么肯定是

如果本身不是,从第一次遇见不是的地方,去掉已经判断的左边和右边,然后分别判断  删掉左边一个和删掉右边一个是不是回文串。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const double PI=acos(-1); 
bool judge(string a,int l,int r)
{
    while(l<=r)
    {
        if(a[l]!=a[r])
            return 0;
        l++;r--;
    }
    return 1;
}
int main()
{
    string s;
    cin>>s;
    int len = s.size();
    int l=0,r=len-1,ans=0; 
    while(l<=r)
    {
        if(s[l]!=s[r])
        {
            int f=(judge(s,l+1,r)||judge(s,l,r-1));
            if(f)
                  printf("Yes\n");
            else 
                printf("No\n");  
            return 0;
        }
        else
            l++,r--;
    }
    printf("Yes\n");
    return 0;
}