我正在阅读有关在排序的字符串数组中搜索(范围)字符串的内容。
它说:
If you want to find all strings starting with "h", you can run a binary search for the strings "h" and "h\uFFFF". This gives all the indexes of the band for all the keys that start with "h". Note that a binary search can return the index where the string would be even if it is not actually in the array.
这一段我什么都不懂。
什么是 h\uFFFF
它如何帮助/用于二进制搜索,最后一个句子是否也意味着即使此搜索也是错误的?
请帮助理解这里所说的内容?
最佳答案
\uFFFF 是 16 位“字母表”中最后排序的“字符”,即在任何有效字母、字符或特殊符号之后。
当您对排序数组中的字符串进行二进制搜索时,您会找到可以插入该字符串的位置。当您有多个相同的字符串时,您会在第一个字符串之前获得一个位置。当您在字符串后附加“字母表的最后一个字母”时,插入点将在最后一个相同的字符串之后,从而在排序数组中为您提供一系列相同的字符串。
想象一下:假设您不允许在单词中使用字母 Z
。现在你有一个排序的字符串数组:
0 1 2 3 4 5 6
aab abb abc abc abd bcx bdy
如果您搜索 abc
,二分查找会告诉您第一个可以插入它的位置,即 2。如果您搜索 abcZ
,那么,二分查找将返回 4,因为 abcZ
按字母顺序紧跟在 abc
之后。这让您知道 2(含)和 4(不含)之间的范围被字符串 abc
占用。如果两次搜索都返回相同的数字,您就知道该字符串不存在于数组中。
在您引用的段落中,\uFFFF
扮演我示例中“禁用字母 Z”的角色。
关于java - 我不可能理解所描述的字符串搜索方法。什么是 uFFFF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036241/