Menu
CoddyTech

Implement Trie (Prefix Tree)

MedioTriepython iconjava iconcpp iconc iconjs icon+10

Construye un trie (árbol de prefijos) para palabras en minúsculas con tres operaciones: insert w agrega la palabra w, search w indica si se insertó w como palabra completa y startsWith p indica si alguna palabra insertada comienza con p. Una palabra cuenta como prefijo de sí misma.

La operación i es ops[i] sobre words[i]. Ejecútalas en orden sobre un trie vacío y devuelve una cadena por cada una: "null" para una inserción, "true" o "false" para una búsqueda o una operación startsWith.

Función

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
las operaciones, en el orden en que se ejecutan
wordsstring-array
la palabra o el prefijo de cada operación
Devuelvestring-array
una respuesta por operación, como texto

Restricciones

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Cada ops[i] es insert, search o startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] contiene únicamente letras minúsculas del inglés.

Ejemplos

Entrada
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Salida
["null", "false", "true", "null", "true"]
Explicación
car comienza con card, así que startsWith car es "true", pero car nunca se insertó, así que la primera búsqueda es "false". Después de insert car, la búsqueda lo encuentra.
challenge icon

Para ir más allá

¿Cómo agregarías una operación countPrefix p que devuelva cuántas palabras distintas almacenadas empiezan por p, todavía en tiempo O(L)?

Restablecer código
def trieOps(ops, words):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

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