20240418
This commit is contained in:
29
ACMOJ-2112.cpp
Normal file
29
ACMOJ-2112.cpp
Normal file
@ -0,0 +1,29 @@
|
||||
#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;
|
||||
}
|
Reference in New Issue
Block a user