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]<<" ";
}

 

posted @ 2021-04-15 13:19  Acception  阅读(47)  评论(0)    收藏  举报