Все темы
129

Каждое слово, начинающееся на «app»

Tier 1Закрыто

Где применяется

1. Задача

Ты набираешь app в строке поиска, и под ней сразу появляется список: apple, apply, application. Это происходит на каждое нажатие клавиши, по словарю из тысяч слов, без заметной задержки.

Обычное множество слов (Set) быстро отвечает на вопрос «есть ли apple в списке?»: по хешу слова оно сразу находит нужное место и другие слова не перебирает. На вопрос «начинается ли хоть одно слово с app?» так ответить нельзя. Множество хранит каждое слово отдельно, общие начала слов в нём никак не связаны, и придётся проверить каждое слово.

Нужно, чтобы быстрым был именно вопрос про начало слова (префикс). Набрал три буквы, получил ответ, не просматривая весь словарь.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит
Вставка и поиск слов в префиксном дереве
insert("car"), insert("cat"), insert("dog"), search("cat"), search("ca"), search("cow")
на ребре буква, в узле префикс, набранный от корня, ✓ = isEnd (здесь кончается целое слово)
word = ""node = -search = -

Сохраняем ["car", "cat", "dog"], чтобы искать их буква за буквой. Корень означает пустой префикс.

Как узнать

Trie (префиксное дерево) (Trie (prefix tree))

Эти слова в условии значат этот паттерн

  • автодополнение или typeahead по множеству строк
  • самый длинный общий префикс среди слов
  • вставка, поиск и проверка префикса в наборе слов
  • сопоставление с большим фиксированным словарём по префиксу

Похоже, но не то

Слово длины m стоит O(m) на вставку или поиск. Память O(суммы символов) по всем словам.

На LeetCode

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

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности