一、LeetCode的字典树
在LeetCode 208 要求实现字典树。
Implement a trie with insert, search, and startsWith methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z.
二、Python实现
# coding:utf-8
"""
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
"""
class TrieNode(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.data = {}
self.is_word = 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.data.get(letter)
if not child:
node.data[letter] = TrieNode()
node = node.data[letter]
node.is_word = True
def search(self, word):
"""
Returns if the word is in the trie.
:type word: str
:rtype: bool
"""
node = self.root
for letter in word:
node = node.data.get(letter)
if not node:
return False
return node.is_word # 判断单词是否是完整的存在在trie树中
def starts_with(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:
node = node.data.get(letter)
if not node:
return False
return True
def get_start(self, prefix):
"""
Returns words started with prefix
:param prefix:
:return: words (list)
"""
def _get_key(pre, pre_node):
words_list = []
if pre_node.is_word:
words_list.append(pre)
for x in pre_node.data.keys():
words_list.extend(_get_key(pre + str(x), pre_node.data.get(x)))
return words_list
words = []
if not self.starts_with(prefix):
return words
if self.search(prefix):
words.append(prefix)
return words
node = self.root
for letter in prefix:
node = node.data.get(letter)
return _get_key(prefix, node)
# Your Trie object will be instantiated and called as such:
trie = Trie()
trie.insert("somestring")
trie.insert("somebody")
trie.insert("somebody1")
trie.insert("somebody3")
print trie.search("key")
print trie.search("somebody3")
print trie.get_start('some')
结构
输出
# print trie.search("key")
False
# print trie.search("somebody3")
True
# print trie.get_start('some')
['somestring', 'somebody', 'somebody1', 'somebody3']123456
采用Class来实现字典树:https://github.com/bdimmick/python-trie/blob/master/trie.py
---------------------
作者:胡楠楠
来源:CSDN
原文:https://blog.csdn.net/fred1653/article/details/51255530
版权声明:本文为博主原创文章,转载请附上博文链接!