题目传送:POJ - 2406
思路:就是利用kmp中next数组的特性来求最大周期的
AC代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1000005; char s[maxn]; int next[maxn]; int main() { while(scanf("%s", s) != EOF) { if(s[0] == '.') break; next[0] = -1; int len = strlen(s); int i = 0, j = -1; while(i < len) { if(j == -1 || s[i] == s[j]) next[++ i] = ++ j; else j = next[j]; } if(len % (len - next[len]) == 0) printf("%d\n", len / (len - next[len])); else printf("1\n"); } return 0; }
时间: 2024-10-28 19:45:15