POJ 2406 KMP

来源:互联网 发布:java图形程序设计 编辑:程序博客网 时间:2024/06/03 20:24
//poj 2406 求字符串的最小循环节,输出重复次数#include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<string.h>#define maxn 5000000using namespace std;int next[maxn];char s[maxn];//研究getnext函数的原理。暂时理解不出来。void getnext(){    int len=strlen(s);    int i=0;int j=-1;    next[0]=-1;    while(i<len)    {        if(s[i]==s[j] || j==-1)        {            i++;            j++;            next[i]=j;        }        else        {            j=next[j];        }    }}int main(){    while(scanf("%s",s)!=EOF)    {        if(s[0]=='.')             break;        getnext();        int len=strlen(s);        if(len%(len-next[len])==0)            printf("%d\n",len/(len-next[len]));        else            printf("%d\n",1);    }}

0 0
原创粉丝点击