TLE70分求助
#include <bits/stdc++.h>
using namespace std;
char s[1000001],t[1000001];
int kmp[1000001],km;
int main(){
scanf("%s%s",s,t);
kmp[0]=kmp[1]=0;
for(int i=1;i<strlen(t);i++){
while(km&&t[i]!=t[km]) km=kmp[km];
kmp[i+1]=t[i]==t[km]?++km:0;
}
km=0;
for(int i=0;i<strlen(s);i++){
while(km&&s[i]!=t[km]) km=kmp[km];
km+=s[i]==t[km]?1:0;
if(km==strlen(t)) printf("%d\n",i-strlen(t)+2);
}
for(int i=1;i<=strlen(t);i++) printf("%d ",kmp[i]);
return 0;
}
评测记录