diff --git a/apps/docs/content/(hash-table)/208-implement-trie-prefix-tree.mdx b/apps/docs/content/(hash-table)/208-implement-trie-prefix-tree.mdx new file mode 100644 index 0000000..5d43fbd --- /dev/null +++ b/apps/docs/content/(hash-table)/208-implement-trie-prefix-tree.mdx @@ -0,0 +1,70 @@ +--- +title: '208. Implement Trie (Prefix Tree)' +description: 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 +sidebar: + label: 'Implement Trie (Prefix Tree)' + badge: 'Medium' +--- + +Trie + +### Example 1: +- Input: `` +- Output: `` +- Explanation: 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 + +### 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. + +## Solution + +```py +class TrieNode: + def __init__(self): + self.children = {} + self.endOfWord = False + + +class Trie: + def __init__(self): + self.root = TrieNode() + + def insert(self, word: str) -> None: + cur = self.root + + for c in word: + if c not in cur.children: + cur.children[c] = TrieNode() + cur = cur.children[c] + cur.endOfWord = True + + def search(self, word: str) -> bool: + cur = self.root + + for c in word: + if c not in cur.children: + return False + cur = cur.children[c] + + return cur.endOfWord + + def startsWith(self, prefix: str) -> bool: + cur = self.root + + for c in prefix: + if c not in cur.children: + return False + cur = cur.children[c] + + return True + + +# 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) +```