当前位置: 首页 > news >正文

Leetcode 1268. 搜索建议系统 (Search Suggestions System)

本题使用前缀树 (Trie) 解法

问题理解

给定产品列表 products 和搜索词 searchWord,要求在输入每个字符后,返回最多3个字典序最小具有当前前缀的产品名。Trie 解法通过预处理将推荐结果缓存在每个前缀节点中,实现高效查询。
Example:

Input: products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse"
Output: [["mobile","moneypot","monitor"],["mobile","moneypot","monitor"],["mouse","mousepad"],["mouse","mousepad"],["mouse","mousepad"]]
Explanation: products sorted lexicographically = ["mobile","moneypot","monitor","mouse","mousepad"].
After typing m and mo all products match and we show user ["mobile","moneypot","monitor"].
After typing mou, mous and mouse the system suggests ["mouse","mousepad"].

思路

  1. 构建带建议缓存的 Trie
    • 每个 Trie 节点包含子节点映射和一个 suggestions 列表(最多存3个字符串)
    • 先对 products 全局排序,再依次插入 Trie,确保每个节点的 suggestions 自然保持字典序
  2. 插入过程
    • 遍历产品名每个字符,沿 Trie 路径下行
    • 在每个经过的节点,若 suggestions 未满(❤️),则加入当前产品名
  3. 查询过程
    • 沿 searchWord 字符路径遍历 Trie
    • 若路径存在,取当前节点的 suggestions;否则后续结果全为空列表

trick

  • 先排序再插入:避免在每个节点反复排序,大幅提升效率
  • 限制 suggestions 大小为 3:节省空间,符合题目要求
  • 路径中断处理:一旦某个字符找不到子节点,后面所有前缀都无匹配,但仍要插入空string.
  • 只存引用或完整字符串:C++ 中直接存 string 即可(现代编译器有 SSO 优化)
  • 使用 unordered_map<char, TrieNode*>:比固定数组更通用(支持任意字符集)

Code

class Solution {
public:struct TrieNode{unordered_map<char, TrieNode*> children;vector<string> suggestions;}; // Trie structure, every children has a character and point a sub-Trie.vector<vector<string>> suggestedProducts(vector<string>& products, string searchWord) {TrieNode* root = new TrieNode();vector<vector<string>> answer;sort(products.begin(), products.end());// Build a Trie treefor(const string& product: products){TrieNode* curr = root;for(char c: product){if(curr->children.find(c) == curr->children.end()){curr->children[c] = new TrieNode();}curr = curr->children[c];if (curr->suggestions.size() < 3) {curr->suggestions.push_back(product);}}}TrieNode* curr = root;for (char c: searchWord){if(curr && curr->children.count(c)) {curr = curr->children[c];answer.push_back(curr->suggestions);}else {curr = nullptr;answer.push_back({});}}return answer;}
};
http://www.jsqmd.com/news/274322/

相关文章:

  • SSM201大学生第二课堂学分成绩活动报名vue
  • 供应链库存做不起来,不在指标不对,而在没有系统把它跑起来
  • 企业用离心机有哪些?6大类型、应用场景及厂家全解析 - 品牌推荐大师1
  • 让科技更直观!10 家擅长科技类发布会的策划公司,从搭建到互动全拿捏 - 速递信息
  • 2026大型激光切割机厂家权威推荐榜单:金属激光切割机/管材激光切割机/小型激光切割机/激光光纤切割机源头厂家精选。
  • 企业如何构建数据中台?从0到1的实战指南与避坑要点
  • 3步彻底解密网易云音乐NCM格式:让音频文件自由播放的终极指南
  • IP定位终极方案:ip2region企业级秒级集成与零依赖部署指南
  • 效率革命:2025年六大低代码数据平台横评,业务自助分析成为现实
  • 【RPA】影刀数据连接器的使用
  • 发送一个我的第一个博客
  • 合规为先 安全护航 — 安全合规的医疗器械第三方公司推荐! - 速递信息
  • 大数据毕设项目推荐-基于大数据技术的个性化的电影推荐系统基于Django协同过滤算法的电影个性化推荐系统大数据【附源码+文档,调试定制服务】
  • 2026年焊接专机厂家实力推荐:郑州旭申智能装备,纵环缝/内外缝/变位机全系解决方案
  • 2026年淘金设备厂家推荐榜:淘金机械 /淘金车/ 移动淘金机械/ 淘金船制造商精选
  • 安全第一!2026年最值得信赖的五大安全电子签名平台推荐 - 博客万
  • ComfyUI Manager终极指南:从零开始掌握AI插件管理
  • 细格栅精选2026:内进流格栅源头厂家服务口碑大盘点,玻璃钢泵站/HMPP一体化预制泵站,细格栅生产厂家找哪家 - 品牌推荐师
  • deepseek-达沃斯视角下的全球经济挑战与中国的稳定角色
  • 2026年本地热门的新高一补课学校联系方式,成绩提分/新高一补课班/新高一补习/补习/外教,新高一补课学校有哪些 - 品牌推荐师
  • 本地部署数据分析软件 FineBI 并实现外部访问
  • JavaSE——左移动
  • StardewXnbHack深度解析:5个技术要点掌握《星露谷物语》资源个性化改造
  • 百度网盘高速下载终极指南:绕过限速的完整解决方案
  • 2026年气体报警器厂家推荐榜:一氧化碳气体报警器/ 丙烷气体报警器/ 油漆气体报警器 /物联网气体报警器/ 商用气体报警器源头厂家精选
  • 如何快速解决GmSSL TLCP握手失败:完整排查指南
  • 本地部署 Web API 构建工具 Uvicorn + FastAPI 并实现外部访问
  • 华润通用卡回收全攻略,5种通用方式盘活 - 京回收小程序
  • SQL中的GROUP BY子句:数据分组与聚合的逻辑基石
  • 魔兽争霸III性能优化工具WarcraftHelper配置指南:从零开始提升游戏体验