判断添加一个字符后字符串是否为回文串

添加等价于删除

即判断删除一个字符后是否为回文串即可


题目:

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


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

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

输入描述:

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

输出描述:

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

示例1

输入

applese

输出

No

输入

java

输出

Yes

备注:

|s|≤105
#include<bits/stdc++.h>
#define ll long long
#define MOD 1e9+7
#define N 1000010
using namespace std;
char a[N],b[N];

int check(const string &s){//检查不符合回文串的第一个位置
	int n=s.length();
	for(int i=0;i<n/2;i++)
	 if(s[i]!=s[n-i-1])
	   return i;
	return -1;
}
int main(){
	string s;
	cin>>s;
	int diff=check(s);
	if(diff==-1)//是回文串
	 cout<<"Yes";
	else{
		string temp=s;
		string s1=s.erase(diff,1);//从diff位置开始删除一个字符 
		string s2=temp.erase(temp.length()-1-diff,1);//删除s相对与difd的位置 
		if(check(s1)==-1||check(s2)==-1)
		  cout<<"Yes";
		else
		  cout<<"No";
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41722217/article/details/86694649