题意:给定一个串,求出该串的所有前后缀的长度(包括该串本身)。
/*
感觉这道题就是求next数组的逆过程,但首先还是要求一遍next数组,
得到最后一个元素的next值,然后再从最后一个元素开始根据next
值往前推,直到next值等于0为止
*/
#include<stdio.h>
#define N 400010
char 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;
}