题目
思路
回文串首先可以对所给的字符串判断一下看看是不是回文串,如果是就直接输出0;对于不是回文串的,我们先来观察一段回文串
"abcba"
对于给出的串"abc"的话,我们可以先对其逆序得到"cba",然后将它的后i位接进去,就可以发现答案会是2.一定不能正序接入,因为得优先满足回文串的条件:首末位相等。
AC代码
#include <bits/stdc++.h>
using namespace std;
bool reverse_string(string s1) {
int len = s1.size();
bool flag = true;
for (int i = 0; i < len / 2; ++i) {
if (s1[i] != s1[len - 1 - i]) {
flag = false;
break;
}
}
return flag;
}
//abcd
//dcba
int main() {
int n;
while (cin >> n, n != 0) {
string s1;
cin >> s1;
if (reverse_string(s1)) {
cout << 0 << endl;
} else {
string s2 = s1;
reverse(s2.begin(), s2.end());
for (int i = 1; i < n; ++i) {
string s3 = s1;
s3 += s2.substr(n - i);
//这儿必须是逆序接上去 不能正序接上去 比如abcd的话反转是dcba 正序接上去就是错误的
//回文串首先要保证头与尾相等如daaa接上d即可倒序过来是aaad
if (reverse_string(s3)) {
cout << i << endl;
break;
}
}
}
}
}