LeetCode 5273. 搜索推荐系统 Search Suggestions System
地址 https://leetcode-cn.com/problems/search-suggestions-system/
题目描述
给你一个产品数组 products 和一个字符串 searchWord ,products 数组中每个产品都是一个字符串。
请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与 searchWord 相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字典序返回最小的三个。
请你以二维列表的形式,返回在输入 searchWord 每个字母后相应的推荐产品的列表。
样例
示例 : 输入:products = ["mobile","mouse","moneypot","monitor","mousepad"], searchWord = "mouse"
输出:[
["mobile","moneypot","monitor"],
["mobile","moneypot","monitor"],
["mouse","mousepad"],
["mouse","mousepad"],
["mouse","mousepad"]
]
解释:按字典序排序后的产品列表是 ["mobile","moneypot","monitor","mouse","mousepad"]
输入 m 和 mo,由于所有产品的前缀都相同,所以系统返回字典序最小的三个产品 ["mobile","moneypot","monitor"]
输入 mou, mous 和 mouse 后系统都返回 ["mouse","mousepad"]
示例 : 输入:products = ["havana"], searchWord = "havana"
输出:[["havana"],["havana"],["havana"],["havana"],["havana"],["havana"]]
示例 : 输入:products = ["bags","baggage","banner","box","cloths"], searchWord = "bags"
输出:[["baggage","bags","banner"],["baggage","bags","banner"],["baggage","bags"],["bags"]]
示例 : 输入:products = ["havana"], searchWord = "tatiana"
输出:[[],[],[],[],[],[],[]]
提示: <= products.length <=
<= Σ products[i].length <= * ^
products[i] 中所有的字符都是小写英文字母。
<= searchWord.length <=
searchWord 中所有字符都是小写英文字母。
算法1
据大佬们说 有什么前缀树的解答
我想了想用trie树的方案 没结果
就开始硬怼了。
首先在products 按照字典序排序,然后另开数组记录对应的单词 与 搜索单词相同的字母数
再遍历这个记录相同字母数的数组 找到相同一个单字的词汇 找到相同两个单字的词汇。。。。。。
遍历或者找到或者找不到为空, 中途剪枝为如果找到符合要求的3个词汇也提前退出(由于已经按照字典序排序,最开始找到的符合要求的3个词汇肯定是字典序优先的)
C++ 代码
class Solution {
public:
vector<vector<string>> ret;
int GetsameCharCount(const string& target,const string& src){
int ret =;
for(int i=;i < target.size() && i < src.size();i++ ){
if(target[i] == src[i]) ret++;
else{
break;
}
}
return ret;
}
vector<vector<string>> suggestedProducts(vector<string>& products, string searchWord) {
sort(products.begin(),products.end());
vector<int> sameCharCount;
for(int i = ; i < products.size();i++){
int t = GetsameCharCount(products[i],searchWord);
sameCharCount.push_back(t);
}
for(int i = ; i < searchWord.size();i++){
vector<string> v;
for(int j = ; j < sameCharCount.size();j++){
if(sameCharCount[j] >i){
v.push_back(products[j]);
}
if(v.size() == ) break;
}
ret.push_back(v);
}
return ret;
}
};

LeetCode 5273. 搜索推荐系统 Search Suggestions System的更多相关文章
- 【leetcode】1268. Search Suggestions System
题目如下: Given an array of strings products and a string searchWord. We want to design a system that su ...
- [LeetCode] Design Search Autocomplete System 设计搜索自动补全系统
Design a search autocomplete system for a search engine. Users may input a sentence (at least one wo ...
- [LeetCode] 642. Design Search Autocomplete System 设计搜索自动补全系统
Design a search autocomplete system for a search engine. Users may input a sentence (at least one wo ...
- [LeetCode] 95. Unique Binary Search Trees II(给定一个数字n,返回所有二叉搜索树) ☆☆☆
Unique Binary Search Trees II leetcode java [LeetCode]Unique Binary Search Trees II 异构二叉查找树II Unique ...
- LeetCode 81——搜索旋转排序数组 II
1. 题目 2. 解答 2.1. 方法一 基于 LeetCode 33--搜索旋转排序数组 中的方法二. 当 nums[mid] = nums[right] 时,比如 [1, 1, 2, 1, 1], ...
- LeetCode:搜索旋转排序数组【33】
LeetCode:搜索旋转排序数组[33] 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ...
- Design Search Autocomplete System
Design a search autocomplete system for a search engine. Users may input a sentence (at least one wo ...
- 集束搜索beam search和贪心搜索greedy search
贪心搜索(greedy search) 贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度. 集束搜索(beam search) 集束搜索可以认为是维特比算法的贪心形式,在维特 ...
- [leetcode]95. Unique Binary Search Trees II给定节点形成不同BST的集合
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...
随机推荐
- sharepoint2010 部署到Windows server 2012 R2服务器遇到的问题
最近由于客户服务器升级到windows server2012 R2 版本,生产环境需要相应升级. 查看很多资料,服务器升级到windows server2012 R2 版本,sharepoint要升级 ...
- 升级python2.7至python3.7
最近在centos7下执行命令时,出现以下提示: DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020 ...
- How To Convert A Partitioned Table To A Non-Partitioned Table Using DataPump In 11g (Doc ID 1276049.1)
How To Convert A Partitioned Table To A Non-Partitioned Table Using DataPump In 11g (Doc ID 1276049. ...
- python(二) jupyter 快捷键
jupyter notebook 中的快捷键介绍 当你熟练使用notebooks的基本功能后,掌握他的快捷键是十分必要的,这样可以大大提高你的工作效率.下面是一些比较常用的快捷键: 编辑模式:点击单元 ...
- 【测试基础】App测试要点总结
测试工作过程中思维过程:测试人员常被看作Bug寻找者,程序的破坏者. 1.好的测试工程师所具备的能力: 细心的观察能力 有效的提问能力 产品的业务能力 好奇心 2.测试人员需要询问问题:测试人员的核心 ...
- 清除Windows系统图标缓存
如果改变程序图标重新编译之后看到的图标并未改变,这可能不windows缓存了之前的图标导致的,需要清除Window的图标缓存来显示正确的图标. 下面是清除Windows系统图标缓存的批处理代码: re ...
- Pipe——高性能IO(三)
Pipelines可以替换掉那些丑陋的封装(kludge).变通(workaround)或妥协(compromise)——用一个在框架中设计优雅的专门的解决方案. 敢肯定,下面所覆盖的那些痛点,对于那 ...
- C# 使用NAudio合并mp3、wav音频文件
1.什么是wav格式 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windo ...
- nlohmann 最优秀的C++序列化工具库 详细入门教程
本文首发于个人博客https://kezunlin.me/post/f3c3eb8/,欢迎阅读最新内容! tutorial to use nlohmann json for serializing d ...
- [Spring cloud 一步步实现广告系统] 5. 投放系统配置+启动+实体类
广告投放系统启动主类说明 /** * SponsorApplication for 广告赞助商/投递服务启动类 * 添加注解{@link EnableFeignClients}之后,当前微服务就可以调 ...