题目链接:https://ac.nowcoder.com/acm/contest/330/I
来源:牛客网
如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?
输入描述:
仅一行,为一个由字母和数字组成的字符串 s。
输出描述:
如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。
示例1
输入
applese
输出
No
思路:
如果一个字符串可以通过添加一个字符变成回文串,那么它可以通过删除一个字符变成回文串。
那么便可以从两边搜,若本来就是回文串,直接输出Yes,否则就找到不匹配的地方,然后判断分别删除两端后的字符串是否为回文串。
注意输出的字符,这里要求Yes,No。我开始输出的YES,NO。然后找了几个小时的错误,抓狂...
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 using namespace std; 5 6 string s; 7 8 bool isHuiWen(int p,int e){ 9 for(;p<=e;p++,e--) 10 if(s[p]!=s[e]) 11 return 0; 12 return 1; 13 } 14 15 int main(){ 16 cin>>s; 17 int i,j; 18 for(i=0,j=s.length()-1;i<=j;i++,j--) 19 if(s[i]!=s[j]) 20 break; 21 if(i>=j) 22 printf("Yes "); 23 else if(isHuiWen(i,j-1)||isHuiWen(i+1,j)) 24 printf("Yes "); 25 else 26 printf("No "); 27 return 0; 28 }