只有求整个字符串的循环节数,可知长为len的字符串循环节长度为len - next[len],所以循环节数就是
len / (len - next[len])
#include <cstdio>
#include <cstring>
char a[1010101];
int next[1010101];
void getN(int m){
int i,j;
j = next[0] = -1;
i = 0;
while(i<m) {
while(j != -1 && a[i] != a[j]) j = next[j];
next[++i] = ++j;
}
}
int main(){
while(scanf("%s",a) && a[0] != '.'){
int len = strlen(a),f = 1;
getN(len);
if(len%(len-next[len]) == 0 && next[len])
printf("%d\n",len/(len-next[len]));
else printf("1\n");
}
return 0;
}