#include <bits/stdc++.h>
using namespace std;
string s;
int kmp[1000005], len;
int main() {
cin >> len >> s;
s = ' ' + s;
int j = 0;
for (int i = 2; i <= len; i++) {
if (j && s[j + 1] != s[i]) j = kmp[j];
if (s[j + 1] == s[i]) j++;
kmp[i] = j;
}
cout << len - kmp[len];
return 0;
}
改成
while(j && s[j + 1] != s[i]) j = kmp[j];
试试
1 个赞
还是 90 啊
1 个赞
我知道了,你忘判断len - kmp[len]
不是len
的因数的情况了,这种情况应该输出len
不是一样的吗
哪里一样了?
刚才脑子和手不同步,打错字了
过了,谢谢!