版权声明:转载于[email protected]的博客 https://blog.csdn.net/nuoyanli/article/details/88873520
链接:https://ac.nowcoder.com/acm/contest/330/I
来源:牛客网
自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。
这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。
如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?
输入描述:
仅一行,为一个由字母和数字组成的字符串 s。
输出描述:
如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。
示例1
输入
applese
输出
No
示例2
输入
java
输出
Yes
备注:
|s|≤10^5
思路:枚举最外层找到不符合回文串的位置,分别判断:1.从当前开始到最后一个不符合条件的位置是否是回文串(就是删除当前字符)2.从当前的下一个到倒数第二个不符合条件的位置是否是回文串(就是删除与当前字符对应位置但是不符合回文串的字符)
参考代码:
#include<iostream>
#include<string>
using namespace std;
bool judge(string str)
{
for(int i = 0; i<(int)str.size()/2;i++){
if(str[i] != str[str.size()-1-i])
return 0;
}
return 1;
}
int main()
{
string str;
while(cin>>str)
{
bool flag = 0;
int i;
for(i = 0; i<(int)str.size()/2;i++)
if(str[i] != str[str.size()-1-i])
break;
if(i == (int)str.size()/2)
flag = 1;
else
flag = (judge(str.substr(i+1,str.size()-2*i-1)) || judge(str.substr(i,str.size()-2*i-1)));
cout<< ((flag==1) ? "Yes" : "No")<<endl;
}
return 0;
}