在ArrayList中使用二进制搜索来查找具有给定前缀的单词

时间:2016-04-16 23:27:12

标签: 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;
}

如果有人可以查看我的代码并向我提供这样的反馈,那么我很感激。谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

您应该使用boolean startsWith(String prefix)代替int compareTo(String s)

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

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

答案 2 :(得分:1)

首先要记住,arrayList需要排序才能使用二进制搜索,否则返回是未定义的。我认为这是你的问题。