#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int next[400005];
int a[400005];
void get_next(string t)
{
int j=-1;
int i=0;
next[0]=-1;
while(i<t.size())
{
if(j==-1||t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int main()
{
string s;
while(cin>>s)
{
get_next(s);
int i=0;
int len=next[s.size()];
while(len!=0)
{
a[i++]=len;
len=next[len];
}
for(int j=i-1;j>=0;j--)
printf("%d ",a[j]);
printf("%d\n",s.size());
}
return 0;
}
POJ 2752(KMP)
最新推荐文章于 2019-08-27 14:24:49 发布