首页 > 技术文章 > 给一个字符串添加一个字符后,判断是不是回文串

FrankChen831X 2019-01-30 22:01 原文

题目链接: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\n");
23     else if(isHuiWen(i,j-1)||isHuiWen(i+1,j))
24         printf("Yes\n");
25     else
26         printf("No\n");
27     return 0;
28 }

 

 

推荐阅读