pku 2406 Power Strings(KMP next数组应用)

#include <stdio.h>
#include <string.h>

#define MAXN 1000005

char str[MAXN];
int next[MAXN];

void getNext(int len)
{
    int j=0,k=-1;
    next[0]=-1;
    while(j<len)
    {
        if( k == -1 || str[j] == str[k] )
        {
            ++j;
            ++k;
            next[j] = k;
        }
        else k=next[k];
    }
}

int main()
{
    int len,t;
    while(scanf("%s",str))
    {
        if(str[0]=='.') break;
        len=strlen(str);
        getNext(len);
        //     for(j=0;j<=len;j++) printf("%d ",next[j]);
        //     printf("\n");

        t = len / ( len - next[len] );
        if( t != 1 && t*( len - next[len] ) == len )
        {
            printf("%d\n",t);
        }
        else printf("1\n");
    }
    return 0;
}

posted @ 2010-08-27 14:21  菜到不得鸟  阅读(203)  评论(0)    收藏  举报