我正在尝试使用二分搜索来查找包含子字符串的字符串。
ArrayList<String> ch = new ArrayList<String>();
ch.add("qwerty");
ch.add("asdfghjkl");
ch.add("c");
ch.add("d");
ch.add("e");
Comparator<String> comparator = new Comparator<String>() {
public int compare(String node1, String node2) {
if (node1.contains(node2)) {
return 0;
}
return node1.indexOf(node2);
}
};
int pos2 = Collections.binarySearch(ch, "sdf", comparator);
是否可以使用二进制搜索而不是使用循环。这给了我一个不正确的索引。
我试图避免使用 string.substring(x,y),其中 x 和 y 是固定值。
最佳答案
Collections.binarySearch
方法用于搜索完全匹配,而不是基于某些子字符串或某种方法的匹配。此外,为了使 binarySearch
工作,您应该有一个基于您传递给 binarySearch
方法的 Comparator
的排序数组(尽管,这个在这里并不重要,因为它也不起作用)。
Is it possible to use binarysearch instead of using loop.
我认为不使用循环就不可能做到这一点。如果您确实担心性能,可以编写自己的二分搜索实现,它检查 contains()
而不是相等。
关于Java - 比较器来搜索子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410306/