# coding: utf-8 class TrieNode: def __init__(self): # Initialize your data structure here. self.map = {} # è®°å½ååºæä¸ªåæ¯æ¯å¦åºç° self.isLeaf = False class Trie: def __init__(self): self.root = TrieNode() # æ ¹èç¹ # @param {string} word # @return {void} # Inserts a word into the trie. def insert(self, word): root = self.root for ch in word: if ch not in root.map: root.map[ch] = TrieNode() # chåºç°å¹¶è®°å½ root = root.map[ch] root.isLeaf = True # 该èç¹å¯ä»¥ä¸ºå¶åèç¹ # @param {string} word # @return {boolean} # Returns if the word is in the trie. def search(self, word): root = self.root i = 0 for ch in word: if ch not in root.map: # æ¾ä¸å°å¹é å符ï¼ç´æ¥è¿åFalseã return False else: i += 1 if (i == len(word)) and root.map[ch].isLeaf: # 夿æ¯å¦æåä¸ä¸ªåæ¯ä¸ä¸ºå¶åèç¹ return True root = root.map[ch] return False # @param {string} prefix # @return {boolean} # Returns if there is any word in the trie # that starts with the given prefix. def startsWith(self, prefix): root = self.root for ch in prefix: if ch not in root.map: return False else: root = root.map[ch] return True # medium: http://lintcode.com/zh-cn/problem/implement-trie/