5,530
社区成员
发帖
与我相关
我的任务
分享
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char s1[1000000];
char s2[1000];
int len1,len2;
int next[1000];
void kmp_next()
{
int i=0;
int j=-1;
next[0]=-1;
while (i<len2)
{
if(j==-1||s2[i]==s2[j])
{
i++;
j++;
next[i]= j;
}
else
{
j=next[j];
}
}
}
int main()
{
scanf("%s",&s1);
scanf("%s",&s2);
len1=strlen(s1);
len2=strlen(s2);
kmp_next();
int i=0;
int j=0;
while((i<len1)&&(j<len2))
{
if((j==-1)||(s1[i]==s2[j]))
{
i++;
j++;
}
else j=next[j];
if(j>=len2) printf("%d\n",i-len2);
}
for (int m=0;m<len2;m++)
printf("%d ",next[m]);
return 0;
}