Menu
CoddyTech

Implement Trie (Prefix Tree)

Бор, или префиксное дерево, хранит слова так, чтобы поиск по их началу выполнялся быстро. Постройте бор для слов в нижнем регистре с тремя операциями: insert w добавляет слово w, search w сообщает, было ли вставлено именно слово w, а startsWith p сообщает, начинается ли какое-либо вставленное слово с p. Слово считается префиксом самого себя.

Операции передаются в порядке следования в виде ops, а words[i] — это слово или префикс для ops[i]. Выполните их на одном боре, который изначально пуст, и верните по одной строке для каждой операции: "null" для вставки и "true" или "false" для поиска или startsWith.

Функция

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
операции в порядке их выполнения
wordsstring-array
слово или префикс для каждой операции
Возвращаетstring-array
один ответ на операцию в виде текста

Ограничения

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Каждый ops[i] — это insert, search или startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] содержит только строчные английские буквы.

Примеры

Ввод
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Вывод
["null", "false", "true", "null", "true"]
Пояснение
Сначала хранится только card, поэтому поиск по car возвращает "false": это слово никогда не добавляли. Это начало слова card, поэтому startsWith car возвращает "true". После добавления car поиск находит его.

lock icon+16 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Как добавить операцию countPrefix p, которая возвращает количество различных сохранённых слов, начинающихся с p, и при этом работает за время O(L)?

Сбросить код
def trieOps(ops, words):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

ops = ["insert", "search", "startsWith", "insert", "search"]
words = ["card", "car", "car", "car", "car"]

Ожидается

["null", "false", "true", "null", "true"]