字典樹 python實現
一、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
版權宣告:本文為博主原創文章,轉載請附上博文連結!