Implement a trie with insert
, search
, and startsWith
methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z
.
Subscribe to see which companies asked this question
下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢?
从上面的图中,我们或多或少的可以发现一些好玩的特性。
第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
第二:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串。
第三:每个单词的公共前缀作为一个字符节点保存。
class TrieNode(object):
def __init__(self):
self.cur = False
self.dic = {}
"""
Initialize your data structure here.
"""
class Trie(object):
def __init__(self):
self.root = TrieNode()
def insert(self, word):
node = self.root
for i in word:
if i not in node.dic:
node.dic[i] = TrieNode()
node = node.dic[i]
node.cur = True
def search(self, word):
node = self.root
for i in word:
if i not in node.dic:
return False
node = node.dic[i]
return node.cur
"""
Returns if the word is in the trie.
:type word: str
:rtype: bool
"""
def startsWith(self, prefix):
p = prefix
node = self.root
for i in p:
if i not in node.dic:
return False
node = node.dic[i]
return True
"""
Returns if there is any word in the trie
that starts with the given prefix.
:type prefix: str
:rtype: bool
"""
# Your Trie object will be instantiated and called as such:
# trie = Trie()
# trie.insert("somestring")
# trie.search("key")