Menu
CoddyTech

Implement Trie (Prefix Tree)

MoyenTriepython iconjava iconcpp iconc iconjs icon+10

Construisez un trie (arbre de préfixes) pour des mots en minuscules avec trois opérations : insert w ajoute le mot w, search w indique si w lui-même a été inséré, et startsWith p indique si un mot inséré commence par p. Un mot est considéré comme un préfixe de lui-même.

L’opération i est ops[i] appliquée à words[i]. Exécutez-les dans l’ordre sur un trie vide et renvoyez une chaîne pour chacune : "null" pour une insertion, "true" ou "false" pour une recherche ou une opération startsWith.

Fonction

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
les opérations, dans l’ordre où elles s’exécutent
wordsstring-array
le mot ou le préfixe pour chaque opération
Renvoiestring-array
une réponse par opération, sous forme de texte

Contraintes

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • Chaque ops[i] est insert, search ou startsWith.
  • 1 ≤ words[i].length ≤ 20
  • words[i] ne contient que des lettres minuscules anglaises.

Exemples

Entrée
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
Sortie
["null", "false", "true", "null", "true"]
Explication
car commence par card, donc startsWith car vaut "true", mais car n’a jamais été inséré, donc la première recherche renvoie "false". Après insert car, la recherche le trouve.
challenge icon

Pour aller plus loin

Comment ajouteriez-vous une opération countPrefix p qui renvoie le nombre de mots distincts stockés commençant par p, toujours en temps O(L) ?

Réinitialiser le code
def trieOps(ops, words):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

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