链接: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;
}