题意:求给定字符串最大循环次数
思路:根据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;
}

本文介绍了解决POJ2406问题的方法,即如何通过KMP算法计算给定字符串的最大循环次数。通过获取字符串的next数组并利用特定公式计算循环长度和循环次数。

612

被折叠的 条评论
为什么被折叠?



