Как найти самый длинный префикс из списка массивов, используя заданное строковое значение в Java? - PullRequest
2 голосов
/ 08 мая 2020
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;
}

1 Ответ

0 голосов
/ 08 мая 2020

Предполагая, что ваш массив чисел отсортирован по возрастанию по длине, вы можете выполнить итерацию назад и использовать 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;
    }
}

Если массив чисел не уже отсортировано, тогда вы можете либо выполнить сортировку, либо вместо этого вам придется перебирать весь несортированный массив и отслеживать длину каждого совпадения.

...