poj2752 求一个串所有的前后缀

来源:互联网 发布:dosbox0.74如何编程 编辑:程序博客网 时间:2024/05/17 04:42

   题意:给定一个串,求出该串的所有前后缀的长度(包括该串本身)。

/*感觉这道题就是求next数组的逆过程,但首先还是要求一遍next数组,得到最后一个元素的next值,然后再从最后一个元素开始根据next值往前推,直到next值等于0为止*/#include<stdio.h>#define N 400010char s[N];int next[N],len;void getnext(){    int i,j;    next[0]=0;    for(i=1,j=0;s[i];i++)    {        while(j>0&&s[i]!=s[j])            j=next[j-1];        if(s[i]==s[j])            j++;        next[i]=j;    }    len=i;}void show(int i)//递归输出结果{    if(next[i]==0)        return;    show(next[i]-1);    printf("%d ",next[i]);}int main(){    while(~scanf("%s",s))    {        getnext();        show(len-1);        printf("%d\n",len);    }    return 0;}


 

原创粉丝点击