奥赛一本通 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;
}
posted @ 2026-09-23 11:51  萧西待水  阅读(16)  评论(0)    收藏  举报