#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
char a[maxn],b[maxn];
int nexts[maxn];
int main()
{
scanf("%s%s",b,a);
int len1=strlen(a);
nexts[0]=-1;
for(int i=0,j=-1;i<=len1;)
{
if(j==-1||a[i]==a[j])nexts[++i]=++j;
else j=nexts[j];
}
int len=strlen(b);
int k=0;
for(int i=0;i<len;i++)
{
while(k&&b[i]!=a[k])k=nexts[k];
k+=a[k]==b[i]?1:0;
if(k==len1)printf("%d\n",i-len1+2);
}
for(int i=1;i<=len1;i++)cout<<nexts[i]<<' ';
return 0;
}
来源:CSDN
作者:嘻嘻嘻西
链接:https://blog.csdn.net/weixin_44499508/article/details/103246364