如何在Java中使用给定的stitng值从数组列表中找到最长的前缀?

问题描述 投票:0回答:1

String [] num = {“ 1201”,“ 12018”,“ 1201800”,“ 12018000”};

String prefix =“ 120180000175135”;

我有两个变量,一个是String数组,另一个是String。现在我想使用前缀从String数组中获取最长的值,请建议我如何在Java中执行此操作。谢谢高级。

也请查看我的解决方案,但在上述条件下不起作用

private static Item binarySearch(Item[] a, String key) {
    int low = 0;
    System.out.println("a.length" + a.length);
    int high = a.length - 1;

    while (low <= high) {
        int mid = (low + high) >>> 1;
        int len = Math.min(key.length(), a[mid].key.length());
        String midVal = a[mid].key.substring(0, len);
        String cmpKey = key.substring(0, len);
        if (midVal.compareTo(cmpKey) > 0)
            low = mid + 1;
        else if (midVal.compareTo(cmpKey) < 0)
            high = mid - 1;
        else
            return a[mid];
    }
    return null;
}
java arrays string prefix longest-substring
1个回答
1
投票

假设您的数字数组按长度升序排列,您可以向后迭代并使用String#startsWith,打印出第一个匹配项:

String[] num = { "1201", "12018", "1201800","12018000" };
String prefix = "120180000175135";

for (int i=num.length-1; i >= 0; i--) {
    if (prefix.startsWith(num[i])) {
        System.out.println("Longest match is: " + num[i]);
        break;
    }
}

如果数字数组已经不是已经排序,那么您可以进行排序,或者必须迭代整个未排序的数组并跟踪每个匹配项的长度。

© www.soinside.com 2019 - 2024. All rights reserved.