【问题标题】:Using binary search in ArrayList to find a word with a given prefix在 ArrayList 中使用二进制搜索查找具有给定前缀的单词
【发布时间】:2016-08-08 19:58:29
【问题描述】:

我正在实现一种二分搜索算法来查找包含前缀参数的单词。这是我目前所拥有的,但输出不正确。

    public static int myBinarySearch2(List<String> arrayList, String prefix) {
    int first = 0;
    int last = arrayList.size() - 1;
    int mid = 0;

    while (first <= last) {
        mid = (first + last) / 2;
        int c = prefix.compareTo(arrayList.get(mid));
        if (c > 0) {
            first = mid + 1;
        } else if (c == 0) {
            return mid;
        } else
            last = mid - 1;
    }
    return mid;
}

如果有人可以查看我的代码并向我提供反馈,我将不胜感激。谢谢!

【问题讨论】:

  • return mid: 更改为return -1;

标签: java string arraylist compare binary-search


【解决方案1】:

首先要记住,arrayList 需要排序才能使用二分搜索,如果不是,它们的返回是未定义的。我认为这是你的问题。

【讨论】:

    【解决方案2】:

    您应该使用boolean startsWith(String prefix) 而不是int compareTo(String s)

    最后一个比较字符串 charchar 完全不同,这不是您所期望的。

    String s = arrayList.get(mid);
    int c = s.startsWith(prefix) ? 0 : prefix.compareTo(s);
    

    【讨论】:

    • 如何从 boolean 中获取 int?
    【解决方案3】:

    您不应该使用 compareTo 方法来检查单词是否包含。

    比较方法: http://www.tutorialspoint.com/java/java_string_compareto.htm

    您可能想使用 .contains 方法: http://www.tutorialspoint.com/java/lang/string_contains.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2020-08-18
      • 1970-01-01
      相关资源
      最近更新 更多