java - 在 ArrayList 中使用二分搜索查找具有给定前缀的单词

标签 java string arraylist compare binary-search

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

    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;
}

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

最佳答案

您应该使用booleanstartsWith(String prefix)而不是intcompareTo(Strings)

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

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

关于java - 在 ArrayList 中使用二分搜索查找具有给定前缀的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36670961/

相关文章:

c++ - 字符串的排列

c# - 遍历具有多种类型的通用列表

java - 由于没有互联网连接而无法打开 url 时的 android 事件

java - 如何不在 MainActivity 上实现 startService(i)

java - 无法使用多态访问具体类的唯一属性

java - 无法正确排序我的数组列表

java - 如何创建一个具有两个值的 ArrayList,一个是 String,一个是 int?

java - 使用显式 Intent NullPointerException 启动 Android IntentService

python - 如何在 Python 中拆分嵌套列表中的字符串?

java - 根据条件结束正则表达式