Menu
CoddyTech

Implement Trie (Prefix Tree)

ŚrednieDrzewo triepython iconjava iconcpp iconc iconjs icon+10

Zbuduj drzewo trie (drzewo prefiksowe) dla słów zapisanych małymi literami z trzema operacjami: insert w dodaje słowo w, search w sprawdza, czy samo w zostało dodane, a startsWith p sprawdza, czy jakieś dodane słowo zaczyna się od p. Słowo jest swoim własnym prefiksem.

Operacja i to ops[i] wykonywane na words[i]. Wykonaj operacje po kolei na pustym drzewie trie i zwróć po jednym ciągu znaków dla każdej z nich: "null" dla operacji insert, "true" lub "false" dla operacji search lub startsWith.

Funkcja

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
operacje w kolejności ich wykonywania
wordsstring-array
słowo lub prefiks dla każdej operacji
Zwracastring-array
jedna odpowiedź na operację, jako tekst

Ograniczenia

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Każde ops[i] to insert, search lub startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] zawiera wyłącznie małe litery alfabetu angielskiego.

Przykłady

Wejście
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Wyjście
["null", "false", "true", "null", "true"]
Wyjaśnienie
car jest początkiem card, więc startsWith car ma wartość "true", ale car nigdy nie zostało wstawione, więc pierwsze wyszukiwanie zwraca "false". Po insert car wyszukiwanie znajduje ten element.
challenge icon

Pytanie dodatkowe

Jak dodać operację countPrefix p, która zwraca liczbę różnych zapisanych słów zaczynających się od p, nadal w czasie O(L)?

Zresetuj kod
def trieOps(ops, words):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

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