kmp
代码:
#include<bits/stdc++.h> using namespace std; char a[1020000],b[1020000]; int next[1020000],j; int main() { cin>>a+1; cin>>b+1; int lena=strlen(a+1); int lenb=strlen(b+1); for(int i=2;i<=lenb;i++) { while(j&&b[i]!=b[j+1]) j=next[j]; if(b[i]==b[j+1]) j++,next[i]=j; } j=0; for(int i=1;i<=lena;i++) { while(j>0&&a[i]!=b[j+1]) j=next[j]; if(a[i]==b[j+1]) j++; if(j==lenb) cout<<i-lenb+1<<" \n",j=next[j]; } for(int i=1;i<=lenb;i++) cout<<next[i]<<" "; }