poj2752 求一个串所有的前后缀
题意:给定一个串,求出该串的所有前后缀的长度(包括该串本身)。
/*感觉这道题就是求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;}