Note5- 字符串匹配算法总结

Brute Force 算法

其实就是暴力搜索

Horspool 算法

预先计算出一个按字母顺序索引的表 d

以下内容来自: Horspool 算法-CSDN博客

情况 1:看第一行,模式中不存在 c(此时 c 就是字母 A),模式的移动长度就是它的全部长度,移到第二行所示的位置。

情况 2:看第二行,c(此时 c 就是字符 O)正好是模式的最后一个字符,但是从右向左比较时,有字符不匹配,比如此时的 A 和 E 不匹配。而且模式中的其他 m-1 个字符也不包含 c。移动的情况类似情况 1,移动的幅度等于模式的全部长度,移到第三行所示的位置。

情况 3:看第一行,模式中存在 c(此时 c 就是字符 L),但是它不是模式的最后一个字符,移动时应该把模式中最右边的 c 和文本中的 c 对齐,移到第二行所示的位置。

情况 4:看第二行,c(此时 c 就是字符 O)正好是模式的最后一个字符,但是从右向左比较时,有字符不匹配,比如此时的 A 和 E 不匹配。而此时模式中的其他 m-1 个字符包含 c。移动的情况类似情况 3,移动时应该把前 m-1 个字符中最右边的 c 和文本中的 c 对齐,移到第三行所示的位置。

KMP 算法

学过无数遍的东西了,跳过

Boyer-Moore 算法

以下内容来自:不用找了,学习BM算法,这篇就够了(思路+详注代码)

BM 算法定义了两个规则:

举例

下面举例说明 BM 算法。例如,给定文本串 HERE IS A SIMPLE EXAMPLE,和模式串 EXAMPLE,现要查找模式串是否在文本串中,如果存在,返回模式串在文本串中的位置。