java - Boyer-Moore 字符串搜索算法起始对齐

标签 java c algorithm

我不是专业程序员,所以请多多包涵。 我正在四处寻找为什么 haystack 和 needle 的初始“对齐”不应该在 needle 的最后一个字符与 haystack 中的相同字符的第一次一致时进行,但最早 在 needle.length()-1 处寻找,而不是在 'haystack.needle.length()-1' 和 'needle.length()-1' 处强制比较?

例子:-

干草堆:actuateaaaaaat

针头:下降

以上,在 haystack 中最后一个 't' 之前的所有内容都可以完全忽略,就移位和比较而言。

最佳答案

如果您要尝试在大海捞针中找到第一个 t(从第七个字符开始),您将不得不查看大海捞针中的每个字符,直到最后。

Boyer Moore 找到了更少比较的位置。比如比较te后,可以向前移动五个字符。所以下一次比较将在 t 和倒数第二个 a 之间进行,这将导致位移为二。因此,仅经过两次比较(而不是七次)就可以找到正确的对齐方式。

关于java - Boyer-Moore 字符串搜索算法起始对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954974/

相关文章:

java - Android 上的 JNI : How to retrieve a string from Java code?

java - 如何改进生成多重集组合的算法?

java - 如何将图像转换为 postscript 形状

java - boolean 值变化监听器 Java

c - 预期为 ‘struct matrix_t *’ 但参数的类型为 ‘struct matrix_t *’ ?_?没有不同

c - 字符串中的 Booth 算法

c#迭代列表以合并具有相同字段的项目

python - 对两个列表的操作

java - java中将字符串分割成字符

java - 通过 Intent 传递 Bundle