1. 程式人生 > >KMP字符串匹配模板代碼

KMP字符串匹配模板代碼

%d none tps clu tar amp names img close

  洛谷的模板傳送門

  

技術分享圖片
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2000200;
int lena,lenb,next[N];
char a[N],b[N];
int main()
{
  scanf("%s%s",a,b);
  lena=strlen(a);
  lenb
=strlen(b); next[0]=next[1]=0; int k=0; for(int i=1;i<lenb;i++){ while(k&&b[i]!=b[k]) k=next[k]; next[i+1]=b[i]==b[k]?++k:0; } k=0; for(int i=0;i<lena;i++){ while(k&&a[i]!=b[k]) k=next[k]; k+=a[i]==b[k]?1:0; if(k==lenb) printf(
"%d\n",i-lenb+2); } for(int i=1;i<=lenb;i++) printf("%d ",next[i]); return 0; }
View Code

KMP字符串匹配模板代碼