回文串----蘑菇街2016校园招聘

题目描述:给一个字符串,能否通过添加一个字符使其变成一个回文字符串,如果能,输出YES,不能,输出NO。

样例输入:coco

样例输出:YES

CODE:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 bool is_p(string s)
 5 {
 6     int len = s.length();
 7     if (len < 2) return true;
 8     for (int i = 0; i < len / 2; ++i)
 9     {
10         int j = len - i - 1;
11         if (s[i] != s[j])
12             return false;
13     }
14     return true;
15 }
16 string reverse(string str)
17 {
18     int len = str.length();
19     for (int i = 0; i < len / 2; ++i)
20     {
21         int j = len - i - 1;
22         char t = str[i];
23         str[i] = str[j];
24         str[j] = t;
25     }
26     return str;
27 }
28 bool judge(string str, int middle)
29 {
30     int len = str.length();
31     for (int i = 0; i < middle; i++)
32     {
33         int j = len - i - 1;
34         if (str[i] != str[j])
35         {
36             str.insert(j+1, 1, str[i]);  //注意:j+1
37             break;
38         }
39     }
40     if (is_p(str))
41         return true;
42     else return false;
43 }
44 int main()
45 {
46     string str;
47     while (cin >> str)
48     {
49         if (is_p(str) || str.length() < 3)
50         {
51             cout << "YES" << endl;
52             continue;
53         }
54         int len = str.length();
55         if (judge(str, len / 2 + 1))
56         {
57             cout << "YES" << endl;
58             continue;
59         }
60         if (judge(reverse(str), len / 2 + 1))
61         {
62             cout << "YES" << endl;
63             continue;
64         }
65         cout << "NO" << endl;
66     }
67 }

 

posted @ 2015-09-19 21:45  JuggMMM  阅读(507)  评论(0编辑  收藏  举报