Поиск записей в TreeSet, которые содержат префикс

1

У меня есть TreeSet на Java, который содержит строки (в частности, слова). Мне нужно написать метод...

public boolean isValidPrefix(String prefix)

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

Например, учитывая префикс "CA" и TreeSet, содержащий {"DOG", "CAT", "COW"}, мой метод должен будет определить, что есть слово "CAT", которое начинается с префикса.

PS Я бы перебирал TreeSet, но временная сложность является очевидным ограничением, так как TreeList будет до 200 000 слов во многих случаях.

  • 0
    Вы должны обновить свой заголовок; проблема здесь заключается в «поиске записей в (древовидном) наборе, которые соответствуют регулярному выражению».
  • 1
    @MarcoAcierno Я изменил одно слово. И он дал префикс «ca», и сказал, что ему нужно будет найти слово «корова». Но «корова» начинается не с «ca», а «кошка». Как это большое изменение?
Показать ещё 13 комментариев
Теги:
string
treeset

1 ответ

5
Лучший ответ

Если одна строка foo является префиксом другого струнного bar в TreeSet, я считаю, что это безопасное предположение для bar немедленно следовать foo в TreeSet.

Таким образом, я считаю, что достаточно взять TreeSet.ceiling(foo) и проверить, является ли foo префиксом.

Из документации этой функции мы видим, что она возвращает именно тот элемент, который будет следовать за данным элементом по порядку.

Возвращает наименьший элемент в этом наборе, который больше или равен данному элементу, или null, если такого элемента нет.

Таким образом, алгоритм будет таким:

  1. Вызовите TreeSet.ceiling() на входе. Если возвращаемое значение равно null, верните значение false.
  2. Если возвращаемое значение не равно null, верните, является ли вход допустимым префиксом возвращаемого значения.
  • 0
    Это звучит разумно. Позвольте мне проверить это, прежде чем я выберу это в качестве ответа.
  • 0
    Ваш ответ не совсем правильный, так как мне пришлось вызывать .contains (префикс) по возвращении TreeSet.ceiling (префикс). Единственный способ, которым потолок (префикс) мог бы возвратить нуль, если префикс больше, чем каждая строка в TreeSet.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню