BF算法的缺点
第2,3,4,5次的比较是纯属浪费时间,因为肯定不相等。
因为原本对应的abcde是相等的,现在进行第二次比较的时候回到主串的第2个位置开始比较下去,肯定是不相等的。
因为BF算法对我们在字符比较失败之前的比对成功的字符信息没有存储,每次就是回退到原来比较的位置上后一个位置开始重新比较。
我们应该在第1步比较失败后,不应该动i,主串位置不动,让子串跳到第6步比较的位置开始比较。
再看一个例子:
比较失败,把j重置为2
x的前缀:
给出这么一个范围:
x的前面字符串的前后缀位置关系:
求出:前后缀的长度是2 k=2
所以当d和x比对失败后,此时i不变,然后就是把子串中j=k=2的字符后移到当前比对失败的x的位置上。