奥赛一本通 1466 Power Strings
1466 Power Strings
题目大意
求一个字符串的最小循环周期(同 1457)。
知识要点
KMP
解题思路
如果一个字符串由另一个字符串 $A$ 循环 $k$ 次组成,那么将 $A$ 循环 $k-1$ 次就是原字符串的 border。
参考代码
#include <bits/stdc++.h>
using namespace std;
char s[1000005];
int f[1000005];
int main() {
while(1) {
scanf("%s", s);
if(s[0] == '.') break;
int n = strlen(s);
for(int i = 1, j = 0; i < n; i++) {
while(j && s[i] != s[j]) j = f[j - 1];
if(s[i] == s[j]) j++;
f[i] = j;
}
printf("%d\n", n % (n - f[n - 1]) ? 1 : n / (n - f[n - 1]));
}
return 0;
}

浙公网安备 33010602011771号