kmp算法基础

Posted pangbi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kmp算法基础相关的知识,希望对你有一定的参考价值。

https://www.luogu.com.cn/problemnew/solution/P3375

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e6+10;
 4 int kmp[maxn];
 5 char a[maxn],b[maxn];
 6 int main()
 7 {
 8     scanf("%s%s",a+1,b+1);
 9     int lena=strlen(a+1);
10     int lenb=strlen(b+1);
11     int index=0;
12     for(int i=2;i<=lenb;i++){
13         while(index&&b[i]!=b[index+1])
14             index=kmp[index];
15         if(b[index+1]==b[i]) index++;
16         kmp[i]=index;
17     }
18     index=0;
19     for(int i=1;i<=lena;i++){
20         while(index>0&&b[index+1]!=a[i])
21             index=kmp[index];
22         if(b[index+1]==a[i])
23            index++;
24         if(index==lenb) {cout<<i-lenb+1<<endl;index=kmp[index];}
25     }
26     for(int i=1;i<=lenb;i++)
27         printf("%d ",kmp[i]);
28     printf("
");
29 }

 

以上是关于kmp算法基础的主要内容,如果未能解决你的问题,请参考以下文章

算法零基础KMPTrieAC自动机

POJ-2752(KMP算法+前缀数组的应用)

kmp算法的个人理解

[数据结构]KMP算法

[数据结构]KMP算法

左神讲解基础算法--kmp算法