poj2752 kmp 进一步运用

来源:互联网 发布:淘宝网购付款收货过程 编辑:程序博客网 时间:2024/06/08 14:11
/*题意:给定字符串,判断哪些下标开始即是它的前缀又是它的后缀同时,由kMP中next[]的性质可得,模式串的前半部分的字符和后半部分的字符相同。*/#include<stdio.h>#include<string.h>#define max 400010int next[max];char str[max];void get_next(char tem[]){    int j=0,k=-1;    int len=strlen(tem);    next[0]=-1;    while(j<len)    {        if(k==-1||tem[j]==tem[k])          next[++j]=++k;        else          k=next[k];    }}void output(int n){    if(next[n]>=0)     output(next[n]);    if(n>0)     printf("%d ",n);}int main(){    while(scanf("%s",str)!=EOF)    {        int t=strlen(str);        get_next(str);        output(next[t]);        printf("%d\n",t);    }    return 0;}

原创粉丝点击