# 208. Implement Trie (Prefix Tree) **难度: Medium** ## 刷题内容 > 原题连接 * https://leetcode.com/problems/implement-trie-prefix-tree/ > 内容描述 ``` Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // returns true trie.search("app"); // returns false trie.startsWith("app"); // returns true trie.insert("app"); trie.search("app"); // returns true Note: You may assume that all inputs are consist of lowercase letters a-z. All inputs are guaranteed to be non-empty strings. ``` ## 解题方案 > 思路 1 ******- 时间复杂度: O(N)******- 空间复杂度: O(N)****** 这个Python实现也太精美了吧,谷歌复写之 然后还unlock了一个solution,to read Trie整个都需要 to read,精美,可爱😊 ```python class TrieNode(object): def __init__(self): """ Initialize your data structure here. """ self.childs = dict() self.isWord = False class Trie(object): def __init__(self): self.root = TrieNode() def insert(self, word): """ Inserts a word into the trie. :type word: str :rtype: void """ node = self.root for letter in word: child = node.childs.get(letter) if child is None: child = TrieNode() node.childs[letter] = child node = child node.isWord = True def search(self, word): """ Returns if the word is in the trie. :type word: str :rtype: bool """ node = self.root for i in word: child = node.childs.get(i) if child is None: return False node = child return node.isWord def startsWith(self, prefix): """ Returns if there is any word in the trie that starts with the given prefix. :type prefix: str :rtype: bool """ node = self.root for letter in prefix: child = node.childs.get(letter) if child is None: return False node = child return True # Your Trie object will be instantiated and called as such: # trie = Trie() # trie.insert("somestring") # trie.search("key") ```