KMP--poj1754

来源:互联网 发布:姚期智回国 知乎 编辑:程序博客网 时间:2024/06/05 03:37

字符串模式匹配,wa了几次,是自己没搞清楚字符串的前缀函数与原来串的位置关系,有待进一步学习

其实这个题还比较简单,写出前缀函数,然后找一下重复子串,出一下就行了,需要注意的是前缀函数中有0,避免做分母。

AC代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;char c[1000005];int next[1000005];int main(){    int i,j;    int len;    while(scanf("%s",c)!=EOF)    {        getchar();        if(strcmp(c,".")==0)            break;        next[0]=-1;        next[1]=0;        int k=0;        int len=strlen(c);        for(i=2;i<=len;i++)        {            while(k>=0&&c[k]!=c[i-1])            {                k=next[k];            }            next[i]=++k;        }        j=len-next[len];        if(len%j)            printf("%d\n",1);        else            printf("%d\n",len/j);    }    return 0;}