90pts 求条

#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

不是一样的吗

哪里一样了?

刚才脑子和手不同步,打错字了

过了,谢谢!