29 lines
729 B
C++
29 lines
729 B
C++
#include <algorithm>
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include <stack>
|
|
using namespace std;
|
|
const int kMaxN = 4e6 + 10;
|
|
char s[kMaxN], s_reverse[kMaxN];
|
|
int len = 0;
|
|
int Next[kMaxN];
|
|
int main() {
|
|
#ifdef local
|
|
freopen("pro.in", "r", stdin);
|
|
#endif
|
|
scanf("%s", s + 1);
|
|
len = strlen(s + 1);
|
|
for (int i = 1; i <= len; i++) s_reverse[i] = s[len + 1 - i];
|
|
for (int i = 2, j = 0; i <= len; i++) {
|
|
while (j > 0 && s_reverse[i] != s_reverse[j + 1]) j = Next[j];
|
|
if (s_reverse[i] == s_reverse[j + 1]) j++;
|
|
Next[i] = j;
|
|
}
|
|
int p = 0;
|
|
for (int i = 1; i <= len; i++) {
|
|
while (p > 0 && s[i] != s_reverse[p + 1]) p = Next[p];
|
|
if (s[i] == s_reverse[p + 1]) p++;
|
|
}
|
|
printf("%d\n", len - p);
|
|
return 0;
|
|
} |