Мне нужно реализовать метод java, который получает набор строк и входную строку и возвращает подмножество строк, содержащее все строки из исходного набора, любое слово которого начинается с входной строки. Например, если строка «Переполнение стека», а ввод «Сверх», она должна быть в подмножестве. Но если строка «Переполнение стека», а вход «поток», она не должна быть в подмножестве.
public Set<String> findMatches (Set<String> names, String input);
Поскольку размер набора огромен (100 миллионов), мне нужно сделать это в самый эффективный способ. Три способа, которые я до сих пор пробовал, привели к сбивающим с толку результатам:
- Разделить каждую строку на пустое место и получить массив строк, а затем, на каждом из элементов в массиве - Вызвать метод StarsWithWithWith.
- Для каждой строки, проверить, начинается ли она с ввода, содержит "" + input (пробел, за которым следует ввод).
- Regex.
Я тестировал эти методы и измерял время, но удивительно - для разных входных значений (набор строк и входная строка) - я получил разные результаты (вариант 1 получил лучшие результаты в большинстве случаев, но очень близко к другие варианты результатов).
Итак, какой из них будет наиболее эффективным? Есть ли другой вариант, о котором я не подумал?