活跃农民
- 积分
- 300
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-11-1
- 最后登录
- 1970-1-1
|
大概写了一下- class TrieNode:
- def __init__(self):
- self.children = {}
- self.item = None
- def findMatchedItems(items, query):
- trie_root = TrieNode()
- for s, weight in items:
- words = s.split()
- trie_node = trie_root
- for word in words:
- if word not in trie_node.children:
- trie_node.children[word] = TrieNode()
- trie_node = trie_node.children[word]
- trie_node.item = (s, weight)
- query_words = query.split()
- trie_node = trie_root
- for word in query_words:
- if word not in trie_node.children:
- return []
- trie_node = trie_node.children[word]
- result = []
- stack = [(trie_node)]
- while stack:
- node = stack.pop()
- if node.item:
- result.append(node.item)
- for child in node.children:
- stack.append((node.children[child]))
- result.sort(key=lambda x: x[1], reverse=True)
- return result
- items = [
- ("fried rice", 10000),
- ("fried rice egg", 500),
- ("egg rice", 300),
- ("fried rice pork", 600),
- ("fried rice chicken", 400),
- ("fried rice shrimp pineapple", 200)
- ]
- query = "fried rice"
- result = findMatchedItems(items, query)
- print(result)
复制代码 |
|