『算法-ACM竞赛-算法-KMP』信息竞赛进阶指南--KMP算法(模板)

『算法-ACM 竞赛-算法-KMP』信息竞赛进阶指南–KMP 算法(模板)

简介:
KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称 KMP 算法)。KMP 算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个 next()函数实现,函数本身包含了模式串的局部匹配信息。KMP 算法的时间复杂度 O(m+n)。

我就不详细展开写了:
博客写的挺好的,我就分享个代码吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
next[1] = 0;
for (int i = 2, j = 0; i <= n; i++) {
while (j > 0 && a[i] != a[j+1]) j = next[j];
if (a[i] == a[j+1]) j++;
next[i] = j;
}

for (int i = 1, j = 0; i <= m; i++) {
while (j > 0 && (j == n || b[i] != a[j+1])) j = next[j];
if (b[i] == a[j+1]) j++;
f[i] = j;
// if (f[i] == n),此时就是A在B中的某一次出现
}

『算法-ACM竞赛-算法-KMP』信息竞赛进阶指南--KMP算法(模板)
https://chiamzhang.github.io/2024/06/29/『算法-ACM竞赛-算法-KMP』信息竞赛进阶指南--KMP算法(模板)/
Author
Chiam
Posted on
June 29, 2024
Licensed under