Menu
CoddyTech

Implement Trie (Prefix Tree)

MédioTriepython iconjava iconcpp iconc iconjs icon+10

Uma trie, ou árvore de prefixos, armazena palavras para que consultas sobre seus inícios sejam rápidas. Crie uma 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.

Você recebe as operações em ordem em ops, e words[i] é a palavra ou o prefixo correspondente a ops[i]. Execute-as em uma única trie que começa vazia e retorne uma string por operação: "null" para uma inserção e "true" ou "false" para uma busca ou 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
A princípio, somente card é armazenado, então buscar por car retorna "false": ele nunca foi inserido como uma palavra. Ele é o início de card, então startsWith car retorna "true". Depois que car é inserido, a busca o encontra.

lock icon+16 testes ocultos ao enviar

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
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

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