【模板】KMP

#include<iostream>
#include<cstdio>
#include<cstring>
#define N 1000010
using namespace std;
char a[N],b[N];
int f[N],j,ans;
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
    scanf("%s\n%s\n",a+1,b+1);
    int la=strlen(a+1),lb=strlen(b+1);
    f[1]=0;j=0;
    for(int i=2;i<=lb;i++){
        while(j && b[i]!=b[j+1]) j=f[j];
        if(b[i]==b[j+1]) j++;
        f[i]=j;
    }
    j=0;
    for(int i=1;i<=la;i++){
        while(j && a[i]!=b[j+1]) j=f[j];
        if(a[i]==b[j+1]) j++;
        if(j==lb) {j=f[j];ans++;}
    }
    printf("%d\n",ans);
    return 0;
}

你可能感兴趣的:(模板,KMP)