- 2022tysc0158 的博客
【模板】KMP
- 2024-8-5 15:03:18 @
#include<cstdio>
#include<cstring>
int nxt[100001];
char s[1000003],t[1000003];
int main(){
scanf("%s%s",s,t);
int len1=strlen(s),len2=strlen(t);
for(int i=1,j=0;i<len2;i++){
while(j&&t[i]!=t[j])j=nxt[j-1];
if(t[j]==t[i])j++;
nxt[i]=j;
}
for(int i=0,j=0;i<len1;i++){
while(j&&t[j]!=s[i])j=nxt[j-1];
if(t[j]==s[i])j++;
if(j==len2)printf("%d\n",i-len2+2),j=nxt[j-1];
}
for(int i=0;i<len2;i++)printf("%d ",nxt[i]);
}
//对应洛谷 P3375 【模板】KMP