Menu
CoddyTech

Implement Trie (Prefix Tree)

MédioTriepython iconjava iconcpp iconc iconjs icon+10

Construa uma trie (árvore de prefixos) para palavras em letras minúsculas com três operações: insert w adiciona a palavra w, search w informa se a própria palavra w foi inserida, e startsWith p informa se alguma palavra inserida começa com p. Uma palavra é considerada prefixo de si mesma.

A operação i é ops[i] aplicada a words[i]. Execute-as em ordem em uma trie vazia e retorne uma string para cada uma: "null" para uma inserção, "true" ou "false" para uma busca ou uma operação startsWith.

Função

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
as operações, na ordem em que são executadas
wordsstring-array
a palavra ou o prefixo de cada operação
Retornastring-array
uma resposta por operação, como texto

Restrições

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Cada ops[i] é insert, search ou startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] contém apenas letras minúsculas do inglês.

Exemplos

Entrada
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Saída
["null", "false", "true", "null", "true"]
Explicação
car começa com card, então startsWith car é "true", mas car nunca foi inserido, então a primeira busca retorna "false". Depois de insert car, a busca o encontra.
challenge icon

Para ir além

Como você adicionaria uma operação countPrefix p que retorna quantas palavras distintas armazenadas começam com p, ainda em tempo O(L)?

Redefinir código
def trieOps(ops, words):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

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