讲在前面,本篇不是具体介绍BM算法的理论原理和代码实现的,只是本人在学习BM算法后对于BM算法判断字符串匹配过程的一些总结,希望带给小伙伴一些思想感悟,自己做好学习沉淀!!!嘻嘻
字符串匹配算法之 BM 算法:
BM 算法包含两个部分,分别是坏字符规则和好后缀规则:
- 坏字符规则:模式串与主串从后向前比较,遇到不匹配的字符时,查看主串中的这个字符(坏字符)在模式串中是否存在
- 如果存在(如果存在多个,取靠后的一个),将模式串的存在的这个字符与主串中的这个字符移动到对齐。
举例:
-
- 如果不存在,将模式串的第一个字符直接移动到主串的这个字符后面,继续从后向前找坏字符
举例:
- 好后缀规则:模式串与主串从后向前比较,遇到不匹配的字符时,后面已经匹配的字符串被称为好后缀,以好后缀为整体,查看模式串中是否存在于好后缀相同的子串
-
- 如果存在,将模式串中与好后缀相同的子串移动到与主串中的好后缀对齐的位置,继续从后向前比较。
举例:
-
- 如果不存在,还需要判断好后缀中是否与模式串存在公共前后缀,如果存在,则将模式串中的前缀部分移动到与好后缀中的后缀部分对齐。否则,直接将模式串的第一个字符移动到好后缀的下一个字符对齐。
举例: