KMP模板
KMP模板
#include <bits/stdc++.h>using namespace std;const int maxn=1e5+100;int kmp[maxn];int main() { char b[maxn]; scanf("%s",b+1); int j=0,lb=strlen(b+1); for(int i=2;i<=lb;i++){ while(j&&b[i]!=b[j+1])j=kmp[j]; if(b[i]==b[j+1])j++; kmp[i]=j; }j=0; char a[maxn];scanf("%s",a+1);int la=strlen(a+1); for(int i=1;i<=la;i++){ while(j&&a[i]!=b[j+1])j=kmp[j]; if(a[i]==b[j+1])j++; if(j==lb){ cout<<i-j+1<<"\n"; } } for(int i=1;i<=lb;i++) cout<<kmp[i]<<" "; }