字符串匹配算法之"Boyer Moore"
Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年,最初的定义1975年就给出了,后续才给出构造算法以及算法证明。 先假定部分定义: 1、pattern 为模式字符串,长度为patLen; 2、Text为目标查找字符串,长度为n; 2、当前不匹配字符在pattern中位置为 j(0≤ j ≤patLen -1); 3、已经匹配的长度为 m(0≤ m <patLen); 4、先假设不匹配字符在pattern中位置为 Δ(*),其中*可以是任何字符; 很多资料里面讲解原理时说的数组位置都是从1开始的,这里为了好理解code,都是从0开始; 首先来看下坏字符规则: 一、坏字符规则( bad character rule ): 让不匹配字符和pattern中最右边出现的该字符对齐匹配,如果没有则全部跳过; >假设1 :遇到不匹配字符,如果该字符在pattern 中不存在,有:(如下图示跳转) 字符指针右移:patLen 长度 后和 pattern 右对齐; Pattern 右移:patLen – m; >假设2 :遇到不匹配字符,如果该字符在pattern 中存在,这里也分两种情况: a>.在pattern最右边出现的该字符在当前不匹配字符左边, 有:(如下图示跳转) 字符指针右移:j–Δ(‘-’)