2026-06-01 18:12:40 +08:00
#+ANKI_DECK : study_deck_02
2026-06-01 17:12:10 +08:00
* TODO 0208. Implement Trie Prefix Tree :medium:
2026-06-01 02:33:30 +08:00
:PROPERTIES:
2026-06-01 17:22:07 +08:00
:NEETCODE: [[file:../../roadmap.org::*0208. Implement Trie Prefix Tree][0208. Implement Trie Prefix Tree]]
2026-06-01 02:33:30 +08:00
:END:
2026-06-01 17:22:07 +08:00
A *trie* (pronounced as "try") or *prefix tree* is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.
Implement the Trie class:
- ~Trie()~ Initializes the trie object.
- ~void insert(String word)~ Inserts the string ~word~ into the trie.
- ~boolean search(String word)~ Returns ~true~ if the string ~word~ is in the trie (i.e., was inserted before), and ~false~ otherwise.
- ~boolean startsWith(String prefix)~ Returns ~true~ if there is a previously inserted string ~word~ that has the prefix ~prefix~ , and ~false~ otherwise.
*Example 1:*
#+begin_ src
Input
["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]
Output
[null, null, true, false, true, null, true]
Explanation
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // return True
trie.search("app"); // return False
trie.startsWith("app"); // return True
trie.insert("app");
trie.search("app"); // return True
#+end_src
*Constraints:*
- ~1 <= word.length, prefix.length <= 2000~
- ~word~ and ~prefix~ consist only of lowercase English letters.
- At most ~3 * 10^{4}~ calls *in total* will be made to ~insert~ , ~search~ , and ~startsWith~ .
2026-06-01 02:39:53 +08:00
** TODO Approach
Write your approach here.
** TODO Python
2026-06-05 22:32:49 +08:00
#+begin_src python :lc-problem 208 :lc-lang python3
2026-06-01 17:22:07 +08:00
class Trie :
2026-06-01 02:39:53 +08:00
2026-06-01 17:22:07 +08:00
def __init__ ( self ) :
def insert ( self , word : str ) - > None :
def search ( self , word : str ) - > bool :
def startsWith ( self , prefix : str ) - > bool :
# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)
2026-06-01 02:39:53 +08:00
#+end_src
** TODO C++
2026-06-05 22:32:49 +08:00
#+begin_src cpp :lc-problem 208
2026-06-01 17:22:07 +08:00
class Trie {
public :
Trie ( ) {
}
void insert ( string word ) {
}
bool search ( string word ) {
}
bool startsWith ( string prefix ) {
}
} ;
2026-06-01 02:33:30 +08:00
2026-06-01 17:22:07 +08:00
/**
* Your Trie object will be instantiated and called as such:
* Trie* obj = new Trie();
* obj->insert(word);
* bool param_2 = obj->search(word);
* bool param_3 = obj->startsWith(prefix);
*/
2026-06-01 02:33:30 +08:00
#+end_src