java - 在Java中的排序字符串数组中查找以指定字符串开头的第一个元素

标签 java algorithm search binary-search

我在 Java 中有一个排序的字符串数组。我试图在该数组中找到以用户指定的字符串开头的第一个元素。一开始我以为是二分查找,但它找到的是相等的字符串,而不是以用户指定的字符串开头的字符串。我应该如何修改二分查找才能实现我想做的事情?

最佳答案

如果元素不存在,二分查找可以找到“比所需元素小的最后一个元素”(有时称为“您应该插入它的索引”)。

通过使用此功能进行二分查找,您可以找到一个元素并检查:

  1. 如果它是确切的元素 - 那么它就是数组中具有该前缀的第一个元素,因为它是具有该前缀的“最小”元素,您就完成了。
  2. 如果它不是同一个元素——通过增加一个——你会得到“比所需元素大的最小元素”。此元素是数组中具有此前缀的第一个元素(如果数组有前缀)。

此功能非常常见 - 例如它存在于 java 的 Arrays.binarySearch() 中.来自 javadocs:

Returns: index of the search key, if it is contained in the array; otherwise, (-(insertion point) - 1). The insertion point is defined as the point at which the key would be inserted into the array: the index of the first element greater than the key

从刚刚找到的索引,很容易找到想要的元素。

代码快照:

String[] arr = { "aa" , "bb","c", "cc" , "ccc", "cccc", "ddD" };
int idx = Arrays.binarySearch(arr, "c");
if (idx < 0) 
    System.out.println(arr[-1 * idx - 1]);
else System.out.println(arr[idx]);

关于java - 在Java中的排序字符串数组中查找以指定字符串开头的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997459/

相关文章:

java - Hibernate 中的身份生成器是单例吗?

algorithm - 0/1 背包算法的变体

Java List 引用另一个 List 来修改自己

mysql - 加入搜索结果

java - 顺序搜索 Java 缺少返回语句?

java - 从文件转换 UTF-8 读取 unicode 行

java - 如何从 Clojure 引用同一包中的 Java 类?

php - 索引时,当整数字段类型留空时,Solr 返回 400 Status Bad Request

c# - 如何使用 IKVM 构建 .net 库?

algorithm - 散列对文本中的小变化稳定