回文串----蘑菇街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 }