二进制搜索带有字符串前缀的数组

时间:2012-03-02 02:27:08

标签: java string binary-search

我如何使用二进制搜索添加包含特定字符串前缀的排序数组的元素,并将这些元素作为它们在数组中出现的顺序添加到arraylist中。

编码并不难,但我在二进制搜索方面遇到困难。要使用字符串前缀,String类提供startswith。我只需要帮助就可以启动二进制搜索

public static <T extends Comparable<T>> ArrayList prefixMatch(T[] list,
            String prefix) {

}

2 个答案:

答案 0 :(得分:2)

使用API​​中的binarySearch方法。

String[] objString = {"a","b","c"};  
System.out.println(Arrays.binarySearch(objString,"c")); 

或者,如果您想创建自己的二进制搜索实现。在这里。

/* BinarySearch.java */
public class BinarySearch {
        public static final int NOT_FOUND = -1;

        public static int search(int[] arr, int searchValue) {
                int left = 0;
                int right = arr.length - 1;
                return binarySearch(arr, searchValue, left, right);
        }

        private static int binarySearch(int[] arr, int searchValue, int left, int right) {
                if (right < left) {
                        return NOT_FOUND;
                }
                /* 
                int mid = mid = (left + right) / 2;
                There is a bug in the above line;
                Joshua Bloch suggests the following replacement:
                */
                int mid = (left + right) >>> 1;
                if (searchValue > arr[mid]) {
                        return binarySearch(arr, searchValue, mid + 1, right);
                } else if (searchValue < arr[mid]) {
                        return binarySearch(arr, searchValue, left, mid - 1);
                } else {
                        return mid;
                }               
        }
}
public class BinarySearchTest {

        public static void main(String[] args) {
                int[] arr = {1, 5, 2, 7, 9, 5};
                Arrays.sort(arr);
                System.out.println(BinarySearch.search(arr, 2));
        }
}

答案 1 :(得分:0)

我有一个类似的要求 - 给定字符串数组找到每个字符串的索引,以新字母开头,即Africa Angela Beach Bamboo Zorro,我需要算法返回[ 0, 2, 4 ]

我发现有一个众所周知的二进制搜索算法的修改,它使用'延迟相等测试',这有找到确切需要的索引的副作用 - 启动范围的索引。

你可以在this Wikipedia article中阅读它(也有一个基于我自己实现的非常简单的例子)。