题意:
解题思路:
直接说结论:
n
−
n
x
t
[
n
]
n-nxt[n]
n−nxt[n]
接下来给出证明:
当nxt[n]前后不重合:
-
接下来证明有没有比n-nxt[n]短的长度
-
假设存在:
-
那么灰色的前后缀是相等的,所以其一定比nxt[n]大,造成矛盾
当nxt[n]前后重合:
同理可证
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
string s;
int nxt[maxn];
void getnxt(string s, int *nxt) {
int l = s.size(), i = 0, j = -1;
nxt[i] = j;
while (i < l) {
if (j == -1 || s[i] == s[j]) i++, j++, nxt[i] = j;
else j = nxt[j];
}
}
int l;
int main() {
cin >> l >> s;
getnxt(s, nxt);
cout << l - nxt[l] << endl;
}