第二十七天(字典树)
今天完成题目:720 720:字典中最长的单词
class Solution:
def longestWord(self, words: List[str]) -> str:
res='' # 结果
trie=Trie() # 初始化字典树(前缀树)
for word in words: #插入前缀树
trie.insert(word)
print(trie.root.children['a'].children)
for word in words:
if trie.search(word):
if len(word) > len(res): # 搜索得到,且长度更大
res=word
elif len(word)==len(res) and word < res: # 长度相同,但字典序更小
res=word
return res
class TrieNode:
def __init__(self):
self.end=False # 表示是否存在某个结点
self.children=collections.defaultdict(TrieNode) # 儿子字典,所有键默认为TrieNode
class Trie:
def __init__(self):
self.root=TrieNode()
def insert(self, word: str) -> None:
node=self.root
for s in word:
node=node.children[s] # node.children[s]默认为TrieNode,这里自动新建儿子
node.end=True
def search(self, word: str) -> bool:
node=self.root
for s in word:
node=node.children.get(s) # 获得键s,没有则返回None
if node is None or not node.end: # 找不到该字符串
return False
return True
reduce(function, iterable[, initializer])
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算
最后更新于
这有帮助吗?