У меня есть TreeSet на Java, который содержит строки (в частности, слова). Мне нужно написать метод...
public boolean isValidPrefix(String prefix)
... который принимает префикс в качестве аргумента и проверяет TreeSet, чтобы узнать, начинается ли какое-либо из его содержащихся слов с префикса.
Например, учитывая префикс "CA" и TreeSet, содержащий {"DOG", "CAT", "COW"}, мой метод должен будет определить, что есть слово "CAT", которое начинается с префикса.
PS Я бы перебирал TreeSet, но временная сложность является очевидным ограничением, так как TreeList будет до 200 000 слов во многих случаях.
Если одна строка foo
является префиксом другого струнного bar
в TreeSet, я считаю, что это безопасное предположение для bar
немедленно следовать foo
в TreeSet.
Таким образом, я считаю, что достаточно взять TreeSet.ceiling(foo)
и проверить, является ли foo
префиксом.
Из документации этой функции мы видим, что она возвращает именно тот элемент, который будет следовать за данным элементом по порядку.
Возвращает наименьший элемент в этом наборе, который больше или равен данному элементу, или null, если такого элемента нет.
Таким образом, алгоритм будет таким:
TreeSet.ceiling()
на входе. Если возвращаемое значение равно null
, верните значение false
.null
, верните, является ли вход допустимым префиксом возвращаемого значения.