kmp

视频链接:https://www.epubit.com/coursePlay?id=2c7370df5bc64a719c24caf3a3ecd280&courseCode=PCCb61ef9948a51&courseId=8d498fe38bba4f178fd374ec172de548&tagId=82901439-099f-44ce-9809-ab8031473017

代码:

#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<<" 
",j=next[j];
    }
    
    for(int i=1;i<=lenb;i++) cout<<next[i]<<" ";
    
}
原文地址:https://www.cnblogs.com/yxr001002/p/14125916.html