Files
cpp-flashcards/org/study_deck_02/dsa/tries/0208-implement-trie-prefix-tree.org
T

104 lines
2.4 KiB
Org Mode
Raw Normal View History

2026-06-01 18:12:40 +08:00
#+ANKI_DECK: study_deck_02
* TODO 0208. Implement Trie Prefix Tree :medium:
:PROPERTIES:
:NEETCODE: [[file:../../roadmap.org::*0208. Implement Trie Prefix Tree][0208. Implement Trie Prefix Tree]]
:END:
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~.
** TODO Approach
Write your approach here.
** TODO Python
#+begin_src python
class Trie:
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)
#+end_src
** TODO C++
#+begin_src cpp
class Trie {
public:
Trie() {
}
void insert(string word) {
}
bool search(string word) {
}
bool startsWith(string prefix) {
}
};
/**
* 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);
*/
#+end_src