首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不可能像描述的那样理解字符串搜索的方法。uFFFF是什么?

不可能像描述的那样理解字符串搜索的方法。uFFFF是什么?
EN

Stack Overflow用户
提问于 2012-01-27 15:59:44
回答 4查看 2K关注 0票数 6

我正在阅读有关在排序的字符串数组中搜索字符串(范围)的内容。

上面写着:

如果要查找以"h“开头的所有字符串,可以对字符串"h”和"h\uFFFF“进行二进制搜索。这为以"h“开头的所有键提供了带的所有索引。注意,即使字符串实际上不在数组中,二进制搜索也可以返回字符串所在的索引。

这一段我什么也不懂。

h\uFFFF是什么?它如何帮助/在二进制搜索中使用?最后一个句子是否也意味着即使这个搜索也是错误的?

能帮我理解一下这里说的话吗?

EN

回答 4

Stack Overflow用户

发布于 2012-01-27 16:04:57

\uFFFF是16位“字母表”中最后排序的“字符”,即在任何有效字母、字符或特殊符号之后。

在对排序数组中的字符串进行二进制搜索时,可以找到可以插入该字符串的位置。当您有多个相同的字符串时,就会在第一个字符串之前得到一个位置。当您在字符串后面追加“字母表的最后一个字母”时,插入点将位于最后一个相同字符串的后面,从而在排序数组中给出一系列相同的字符串。

想象一下:假设你不允许在你的单词中使用字母Z。现在,您有了一个排序的字符串数组:

代码语言:javascript
运行
复制
0   1   2   3   4   5   6
aab abb abc abc abd bcx bdy

如果您搜索abc,二进制搜索将告诉您可以插入它的第一个位置,即2。如果搜索abcZ,thoug,二进制搜索将返回4,因为abcZ按字母顺序排列在abc后面。这使您知道字符串abc占用了2 (包括)和4 (独占)之间的范围。如果两个搜索都返回相同的数字,则知道数组中不存在字符串。

在你引用的段落中,\uFFFF扮演了我的例子中的“禁止字母Z”的角色。

票数 9
EN

Stack Overflow用户

发布于 2012-01-27 16:03:26

\uFFFF是Java中最大的可能字符。由于字符串是排序的,搜索h将找到范围的开始,而h\uFFFF将找到结束(假设这里是unicode字符串),因为没有第二个字符比\uFFFF大。即使它不能与字符串完全匹配,搜索也会返回目标位置的索引,即使目标不在那里。

更新:\uFFFF是16位块中最大的可排序unicode字符,如果您正在使用32位块,请使用U+10FFFF (不管在Java中是什么)。我个人从未在Java中工作过32位unicode块。参见http://www.unicode.org/versions/Unicode5.2.0/ch16.pdf的第16.7节。

U+FFFF和U+10FFFF.这两个非字符代码点的属性是与特定Unicode编码窗体的最大代码单元值相关联。在UTF-16中,U+FFFF是与最大16位代码单位值相关联的FFFF .U+10FFFF与最大的合法UTF-32位代码单位值10 10FFFF相关联.此属性将这两个非字符代码点作为哨兵呈现为内部用途。例如,可以用来表示列表的结尾,表示保证高于任何有效字符值的索引中的值,等等,

票数 3
EN

Stack Overflow用户

发布于 2012-01-27 16:08:59

Java中的\uFFFF序列表示使用Unicode编码点U+FFFF的字符。但是,代码点根本不编码字符:

U+FFFF用于表示保证不为字符的数值,用于索引末尾的最后值等用途。

参见以下参考资料:Unicode技术报告#16这个Unicode字符图表这个字符定义

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9036241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档