题目:
题解:
失配等于本身的后缀,而且失配的失配一定是原式的后缀
代码:
#include <cstdio>
#include <cstring>
using namespace std;
int t[400005],l,ans[400005],tot=0;char st[400005];
void sp()
{
int i,j;
t[0]=-1;
l=strlen(st);
for (i=0;i<l;i++)
{
j=t[i];
while (j!=-1 && st[i]!=st[j]) j=t[j];
t[i+1]=++j;
}
}
int main()
{
while (gets(st))
{
sp();
int j=l,i;
memset(ans,0,sizeof(ans));
tot=0;
while (j!=-1)
{
ans[++tot]=j;
j=t[j];
}
for (i=tot-1;i>=1;i--)
printf("%d ",ans[i]);
printf("\n");
}
}