mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-03 05:27:36 +00:00
feat(work): add solution for LeetCode 208 Implement Trie (Prefix Tree)
This commit is contained in:
1 parent
1fa0731ea7
commit
fb2d4c88c2
1 file changed
+103
@@ -0,0 +1,103 @@
|
|||||||
|
"""
|
||||||
|
208. Implement Trie (Prefix Tree)
|
||||||
|
Difficulty: Medium
|
||||||
|
https://leetcode.com/problems/implement-trie-prefix-tree/
|
||||||
|
|
||||||
|
──────────────────────────────────────────────────
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
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.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
Reference in new issue
Block a user