|
| 1 | +***Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。*** |
| 2 | + |
| 3 | +``` |
| 4 | +输入 |
| 5 | +["Trie", "insert", "search", "search", "startsWith", "insert", "search"] |
| 6 | +[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]] |
| 7 | +输出 |
| 8 | +[null, null, true, false, true, null, true] |
| 9 | +
|
| 10 | +解释 |
| 11 | +Trie trie = new Trie(); |
| 12 | +trie.insert("apple"); |
| 13 | +trie.search("apple"); // 返回 True |
| 14 | +trie.search("app"); // 返回 False |
| 15 | +trie.startsWith("app"); // 返回 True |
| 16 | +trie.insert("app"); |
| 17 | +trie.search("app"); // 返回 True |
| 18 | +``` |
| 19 | + |
| 20 | +``` |
| 21 | +class TrieNode(): |
| 22 | + def __init__(self, val=None): |
| 23 | + self.val = val |
| 24 | + self.isEnd = False |
| 25 | + self.children = {} |
| 26 | +
|
| 27 | +class Trie: |
| 28 | + def __init__(self): |
| 29 | + self.root = TrieNode() |
| 30 | +
|
| 31 | + def insert(self, word: str) -> None: |
| 32 | + cur_node = self.root |
| 33 | + for c in word: |
| 34 | + if c not in cur_node.children: |
| 35 | + cur_node.children[c] = TrieNode(c) |
| 36 | + cur_node = cur_node.children[c] |
| 37 | + cur_node.isEnd = True |
| 38 | +
|
| 39 | + def search(self, word: str) -> bool: |
| 40 | + cur_node = self.root |
| 41 | + for c in word: |
| 42 | + if c not in cur_node.children: |
| 43 | + return False |
| 44 | + cur_node = cur_node.children[c] |
| 45 | + return cur_node.isEnd |
| 46 | +
|
| 47 | + def startsWith(self, prefix: str) -> bool: |
| 48 | + cur_node = self.root |
| 49 | + for c in prefix: |
| 50 | + if c not in cur_node.children: |
| 51 | + return False |
| 52 | + cur_node = cur_node.children[c] |
| 53 | + return True |
| 54 | +``` |
0 commit comments