使用BinarySearch进行前缀搜索

时间:2014-02-10 09:00:37

标签: java

使用前缀字符串我需要使用BinarySearch显示ArrayList中所有可能的字符串。是否有可能告诉我怀特的方式。

BinarySearch(myList, SearchString);

1 个答案:

答案 0 :(得分:1)

每个String prefix 和非空String suffix 适用prefix < prefix+suffix

因此,您可以使用Collections.<String>binarySearch(List<String>,String)来搜索 prefix 的位置。当然,前缀的存在与否并未说明prefix+suffix String s的存在与否。因此,如果索引是否定的,请使用-index-1转换它并检查该位置是否等于列表的大小(在这种情况下没有找到前缀String)或者String at该索引具有前缀。如果索引不是负数,即找不到没有后缀的 prefix ,则必须决定是否包含带有空后缀的String s。由于binarySearch将在多次出现的情况下返回任意索引,因此您必须使用返回的索引线性地转换到第一个匹配项,无论是向后还是向前,具体取决于您是否 prefix < / em>不包括后缀。

获得第一个位置后,您可以再次使用binarySearch通过搜索大于任何前缀{{1}的最小String来查找所有前缀String的结尾}}。可以通过将前缀的最后一个字符加1来构造此String。在这里,String是否真的存在并不重要,它只是为我们提供了前缀String范围的分隔符。因此,您将使用String转换负值,并且第一个索引为-index-1,不带前缀;如果没有这样的String,它将是列表的大小。

String