今天再做KMP时做得不是很好,因此就对此展开了训练。
#include<stdio.h>
#include<string.h>
char s[400001];
int next[400001];
int ans[400001];
int main()
{
while(scanf("%s",s)!=EOF)
{
int i,k;
next[0]=-1;k=-1;i=0;
int len=strlen(s);
while(i<len)
{
if(k==-1||s[k]==s[i])
{
i++;k++;
next[i]=k;
}
else k=next[k];
}
int cur=len;k=0;
ans[k++]=len;
while(1)
{
if(next[cur]<=0)break;
ans[k++]=next[cur];
cur=next[cur];
}
k--;
for(;k>=1;k--)
printf("%d ",ans[k]);
printf("%d\n",ans[k]);
}
return 0;
}