Menu
CoddyTech

Implement Trie (Prefix Tree)

MedioTriepython iconjava iconcpp iconc iconjs icon+10

Crea un trie (albero di prefissi) per parole in minuscolo con tre operazioni: insert w aggiunge la parola w, search w indica se w stessa è stata inserita e startsWith p indica se qualche parola inserita inizia con p. Una parola è considerata prefisso di se stessa.

L'operazione i è ops[i] su words[i]. Esegui le operazioni nell'ordine indicato su un trie vuoto e restituisci una stringa per ciascuna: "null" per un inserimento, "true" o "false" per una ricerca o un'operazione startsWith.

Funzione

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
le operazioni, nell’ordine in cui vengono eseguite
wordsstring-array
la parola o il prefisso per ogni operazione
Restituiscestring-array
una risposta per operazione, come testo

Vincoli

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Ogni ops[i] è insert, search o startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] contiene solo lettere minuscole inglesi.

Esempi

Input
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Output
["null", "false", "true", "null", "true"]
Spiegazione
car è all’inizio di card, quindi startsWith car è "true", ma car non è mai stato inserito, quindi la prima ricerca restituisce "false". Dopo insert car, la ricerca lo trova.
challenge icon

Per approfondire

Come aggiungeresti un'operazione countPrefix p che restituisce quante parole memorizzate distinte iniziano con p, sempre in O(L)?

Ripristina il codice
def trieOps(ops, words):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

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