关于坏字符 BM匹配算法跟常识性的匹配算法不同的地方,首先就在于BM匹配算法,是从模式串的最后一位开始,向前开始匹配的。
首先,BM算法中的两个比较重要的概念就是坏字符和好后缀
- 关于坏字符
BM匹配算法跟常识性的匹配算法不同的地方,首先就在于BM匹配算法,是从模式串的最后一位开始,向前开始匹配的。
当发现第一个不匹配的位置的时候,就会出现所谓的坏字符,比如
src:a b c d e f g
pat:h i j k
其中坏字符就是’d’,当找到坏字符的时候,我们要记录pattern串当前的下标p_i以及pattern串最大的坏字符的下标(没有按照-1处理)s_i,这样将pattern串向右滑动(p_i-s_i)个字符继续匹配即可。比如:
src: a b c d e f g
pat: b c d
第一个坏字符是’c’,p_i 是2,坏字符’c’对应的s_i是1,所以pattern串向右滑动一个字符继续匹配即可
但是,如果只是有坏字符的话,是有可能使pattern串向左滑动的,比如:
src: a a a a a a a a a
pat: b a a a
<