题意:求给定字符串最大循环次数
思路:根据KMP算法的next数组知,一个长度为n的字符串,
if(n%(n-next[n])==0)
最小循环长度为 L=n-next[n];
最大循环次数为 S=n/L=n/(n-next[n]);
#include<stdio.h>
#include<string.h>
int next[1001010]={-1},n;
char s[1001010];
int getnext()
{
int i=0,j=-1;
while(i<n){
if(j==-1||s[i]==s[j]){
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
if(n%(n-next[n])==0)
return n/(n-next[n]);
return 1;
}
int main()
{
while(scanf("%s",s)!=EOF){
if(strcmp(s,".")==0)
break;
n=strlen(s);
n=getnext();
printf("%d\n",n);
}
return 0;
}