批注:在某种极端情况下BF算法效率会非常低,假设主串的长度是m,模式串的长度是n,BF算法的最坏时间复杂度是O(mn)。
比如一个字符串A 一个字符串B,判断出B是否是A的子串,且返回在A中第一次出现的位置。
为了统一概念,我们把字符串A称为主串,把字符串B称为模式串。
BF解法: 我们从主串的首位开始,把主串和模式串的字符逐个比较,如果主串的首位字符和模式串的首位字符相匹配,则继续比较主串和模式串的下一位, 如果不匹配,我们把模式串后移一位对齐主串的第二位,继续比较,直到模式串中的字符和主串中的字符匹配且顺序位置一致。
例:1.我们从主串的首位开始,把主串和模式串的字符逐个比较:
显然,主串的首位字符是a,模式串的首位字符是b,两者不匹配。
2.我们把模式串后移一位,从主串的第二位开始,把主串和模式串的字符逐个比较:
主串的第二位字符是b,模式串的第二位字符也是b,两者匹配,继续比较: