分析: 可用KMP解决(next[] 数组的优良特性之一) 最小周期长 = len - next[len]
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1000000 + 5;
int next[maxn];
void getnext(int len, char *src){
int i = 0, j = -1;
next[0] = j;
while (i < len){
while (j != -1 && src[i] != src[j]){
j = next[j];
}
i++; j++;
if (j >= len)
next[i] = next[j-1];
else
next[i] = j;
}
}
int main(){
char s[maxn];
while (scanf("%s", s) != EOF && strcmp(s, ".") != 0){
int len = strlen(s);
getnext(len, s);
int flag = len%(len - next[len]);
//for (int i=0; i<=len; i++)
// printf("%d ", next[i]);
if (flag)
puts("1");
else
printf("%d\n", len/(len-next[len]));
}
return 0;
}
/**
ababab
000
*/