我不是专业程序员,所以请耐心等待。 我环顾四周的原因是,为什么干草堆和针的初始“对齐”不应该在针的最后一个字符与干草堆中的同一个字符的第一个一致性上进行,而却在最早的在needle.length()-1处寻求,而不是在'haystack.needle.length()-1'和'needle.length()-1'处进行比较?
示例:-
干草堆:actuateaaaaaat
针:取消扫描
以上,就移位和比较而言,干草堆中最后一个“ t”之前的所有内容都可以完全忽略。
答案 0 :(得分:3)
如果要尝试在干草堆中查找第一个t
(从第七个字符开始),则必须查看干草堆中的每个字符,直到结束为止。
布尔·摩尔(Boyer Moore)用更少的比较找到了位置。例如,将t
与e
进行比较后,它可以向前移动五个字符。因此,下一个比较将在t
与倒数第二个a
之间进行,这将导致位移2。因此,只需进行两次比较而不是七个比较,即可找到正确的对齐方式。