感悟:学习算法,不仅要学会其本身,自己还应该能扩展,要务实,不要急功近利。否则,会学的一塌糊涂。
要求:求最小重复字串的个数,利用KMP算法的性质,求解。
#include<stdio.h>
#include<string.h>
#define max 1000000
int next[max];
char str1[max];
int get_next(char *pat)
{
int j=0,k=-1;
int len=strlen(pat);
next[0]=-1;
while(j<len)
{
if(k==-1||pat[j]==pat[k])
next[++j]=++k;
else
k=next[k];
}
j=len-k;//如果最后一个位置不匹配,那么就会滚到len-k的位置,也就是最小重复字串的长度。
if(len%j==0)
return len/j;
else
return 1;
}
int main()
{
while(scanf("%s",&str1)!=EOF)
{
if(str1[0]=='.')
break;
printf("%d\n", get_next(str1));
}
return 0;
}