Массив поиска для самой длинной строки, которая является префиксом строки поиска - PullRequest
2 голосов
/ 18 июня 2019

Я новый разработчик Swift.Я использую Swift 4.2 и Xcode 10.2.

Я хотел бы найти в массиве единственный результат, в котором больше всего символов по сравнению с моей строкой поиска.Чтобы быть более точным, мне нужна самая длинная строка из моего массива, которая является префиксом строки поиска.

Например, если мой массив:

let array = ["1", "13", "1410", "1649", "1670"]

и моя строка поиска:

let searchString = "16493884777"

Я хотел бы, чтобы результат был "1649".

Я не могу найти другой вопрос SO, который имеет быстрое решение.

1 Ответ

2 голосов
/ 18 июня 2019

Вы можете просто перебрать массив префиксов с конца (при условии, что массив префиксов отсортирован) и сразу же вернуться, если вы достигнете совпадения, поскольку этот префикс будет гарантированно самым длинным, поскольку другой совпадающий префикс такой же длины не может существовать :

import Foundation

func longestMatchingPrefix(_ prefixArray: [String], _ searchString: String) -> String {
    for p in prefixArray.reversed() {
        if searchString.hasPrefix(p) {
           return p
        }
    }
    return "No matching prefix found"
}

print(longestMatchingPrefix(["1", "13", "1410", "1649", "1670"], "16493884777"))

Выход:

1649
...