python-leetcode-搜索推荐系统

1268. 搜索推荐系统 - 力扣(LeetCode)

可以使用 Trie(前缀树)来高效存储和检索前缀匹配的产品,同时在 Trie 的每个节点存储最多 3 个字典序最小的产品,以加速查询。以下是 Python 代码实现:

from typing import List
import bisect

class TrieNode:
    def __init__(self):
        self.children = {}
        self.suggestions = []

class Trie:
    def __init__(self):
        self.root = TrieNode()
    
    def insert(self, word: str):
        node = self.root
        for ch in word:
            if ch not in node.children:
                node.children[ch] = TrieNode()
            node = node.children[ch]
            if len(node.suggestions) < 3:
                bisect.insort(node.suggestions, word)
                if len(node.suggestions) > 3:
                    node.suggestions.pop()
    
    def search(self, prefix: str) -> List[List[str]]:
        node = self.root
        result = []
        for ch in prefix:
            if ch in node.children:
                node = node.children[ch]
                result.append(node.suggestions)
            else:
                result.append([])
                node = TrieNode()  # Create a dummy node to continue empty suggestions
        return result

class Solution:
    def suggestedProducts(self, products: List[str], searchWord: str) -> List[List[str]]:
        trie = Trie()
        for product in sorted(products):
            trie.insert(product)
        return trie.search(searchWord)
    
    def printSuggestions(self, products: List[str], searchWord: str):
        suggestions = self.suggestedProducts(products, searchWord)
        for i, s in enumerate(suggestions):
            print(f"After typing '{searchWord[:i+1]}': {s}")

# 示例
sol = Solution()
products = ["mobile", "mouse", "moneypot", "monitor", "mousepad"]
searchWord = "mouse"
print(sol.suggestedProducts(products, searchWord))
sol.printSuggestions(products, searchWord)

代码解析:

  1. TrieNode 结构

    • children:存储子节点(即下一个字符)。
    • suggestions:存储当前节点下最多 3 个按字典序排列的产品。
  2. Trie 结构

    • insert 方法:将 products 按字典序排序后插入 Trie,每个节点维护最多 3 个推荐产品。
    • search 方法:查询 searchWord 的前缀匹配产品。
  3. Solution 类

    • 先对 products 排序。
    • 逐个插入 Trie
    • 依次搜索 searchWord 的每个前缀,返回推荐列表。

这样能高效地获取推荐产品列表。你可以试试不同的输入!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值