poj-2406kmp中next指针

来源:互联网 发布:stp 查看环路端口 编辑:程序博客网 时间:2024/05/29 16:59

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int next[1000000];
int len;
char s[1000000];
int getnext()//模式串
{
    int i=0;

    next[0]=-1;
    int j=-1;
    for(int i=0;i<len;)
    {
        if(j==-1||s[i]==s[j] )
        {
            i++;j++;
            next[i]=j;
        }
        else
            j=next[j];
    }

     int x=i-next[i];
    if(len%x==0)
        return x;
    else
        return len;

}
int main()
{


    while(scanf("%s",s)!=EOF){
        if(s[0]=='.')break;
       len=strlen(s);
       int ans=getnext();
       ans=len/ans;
       printf("%d\n",ans);

    }
    return 0;
}


 

原创粉丝点击