文章
1
粉丝
119
获赞
1
访问
885
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
const int N = 1000010;
int ne[N];
char s[N],p[N];
int main()
{
scanf("%s%s",s+1,p+1);
int n = strlen(s+1);
int m = strlen(p+1);
ne[1]=0;
for (int i=2,j=0;i<=m;i++)
{
while (j&&p[j+1]!=p[i]) j=ne[j];
if (p[j+1]==p[i]) j++;
ne[i]=j;
}
for (int i=1,j=0;i<=n;i++)
{
while (j&&p[j+1]!=s[i]) j=ne[j];
if (p[j+1]==s[i]) j++;
if (j==m)
{
cout<<i-m+1<<endl;
j=ne[j];
}
}
for (int i=1;i<=m;i++)
cout<<ne[i]<<" ";
return 0;
}
登录后发布评论
暂无评论,来抢沙发