poj2406

来源:互联网 发布:书生软件 百度百科 编辑:程序博客网 时间:2024/05/14 18:05

感悟:学习算法,不仅要学会其本身,自己还应该能扩展,要务实,不要急功近利。否则,会学的一塌糊涂。

要求:求最小重复字串的个数,利用KMP算法的性质,求解。

 

 

#include<stdio.h>#include<string.h>#define max 1000000int 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;}