POJ-2406 Power Strings KMP

来源:互联网 发布:给二维数组赋值并输出 编辑:程序博客网 时间:2024/05/11 02:08

如何判断是否是循环语句思考了很久,最后还是参考了别人的思路

#include <cstdio>#include <cstring>#include <iostream>#define max 1000000using namespace std;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];    }    cout<<next[j]<<endl;     j=len-next[j];//如果是循环字符串,j一定是一个循环的长度    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;}


0 0