BM算法, Boyer-Moore,非常高效,是KMP算法的3~4倍。
高能预警,此算法较难。
核心思想
匹配过程其实就是模式串在主串中不停地往后滑动。
当遇到不匹配的字符时,BF和RK算法做法是往后滑动一位,从模式串第一个字符重新匹配。

上图中,主串中的 c 其实在模式串中并不存在,所以滑动时只要与 c 有重合,肯定无法匹配。
所以可以把模式串多滑动几位,移到c后面再开始匹配。这样效率就提高了。
那么如何寻找这种规律?这就是BM算法的本质了。
算法原理
BM算法包含两部分坏字符规则( bad character rule )和 好后缀规则( good suffix
shift )。
坏字符规则
BM 算法的匹配顺序按照模式串下标从大到小的顺序,倒着匹配的。

倒着匹配时,主串中某个字符在模式串中没法匹配,把这个没有匹配的字符叫作 坏字符(上图中的 c )。
这时,可以将模式串直接往后滑动三位,将模式串滑动到 c 后面的位置,再从模式串的末尾字符开始比较。
Boyer-Moore算法:坏字符与好后缀规则解析

BM算法是一种高效的字符串匹配算法,比KMP算法快3~4倍。其核心思想是利用坏字符规则和好后缀规则减少不必要的匹配。坏字符规则通过找到坏字符在模式串中的位置来确定滑动距离;好后缀规则则考虑已匹配部分,通过寻找模式串中的匹配子串来优化滑动。当两种规则结合使用时,可以有效避免倒退,提高匹配效率。
最低0.47元/天 解锁文章

5577

被折叠的 条评论
为什么被折叠?



