字符串的冒泡排序_Leetcode1268 字符串推荐系统

专注最新leetcode刷题,用自己的努力提升自己;用自己的分享,让更多人对算法更加得心应手

92e4b5a8874b104e6841ac558bd47052.png
4c060a2fcbc6d19fc138052e5573503a.png
67af9f3ec2f70c40795ead8280b9f90d.png

题目描述

给你一个字符串数组products和一个字符串searchWord。我们设计一个系统,这个会随着searchWord的输入从products中推荐三个product的名字。推荐的products应该和输入的searchWord保持相同的前缀。如果此时有多于三个与输入searchWord相同的前缀,此时返回字典顺序最小的三个products的名字

返回:当输入每个searchWord的字母时返回对应的推荐products的列表

问题分析

  1. 返回的是按照字典顺序最小的三个products,所以第一反应有可能需要对输入的products进行排序
  2. 返回的是与输入searchWord具有相同前缀的products,也就是在排序后,在products中找到第一个与输入searchWord相同前缀(如果有),然后同时返回其后面与输入searchWord具有相同前缀的另外两个products
  3. 由于searchWord在输入过程中,会有不同的返回结果,所以第二个字母的键入时的结果肯定是在第一个键入的基础进行搜索的结果。
  4. 当没有匹配时,返回为[]

代码实现

vector> suggestedProducts(vector& ps, stringword) {  sort(begin(ps), end(ps));//利用sort函数对原字符串进行升序排序 vector> res(word.size()); for (auto l = 1; l <= word.size(); ++l)  {  auto w = word.substr(0, l);  auto it = lower_bound(begin(ps), end(ps), w);//lower_bound()来二分查找开始位置 for (; it != end(ps) && it->substr(0, l) == w && res[l - 1].size() < 3; ++it) res[l - 1].push_back(*it);  }  return res;}

复杂度分析

时间复杂度:由于采用了二叉树寻找,所以为O(nlogn)

空间复杂度:O(1)

总结

  • 熟悉排序的相关方法,并会用sort函数Sort(start,end,cmp)(1)start表示要排序数组的起始地址; (2)end表示数组结束地址的下一位; (3)cmp用于规定排序的方法,可不填,默认升序 sort()函数是c++一种排序方法之一,相较冒泡排序和选择排序所带来的执行效率不高的问题,sort()函数使用的排序方法是类似于快速排序的方法,时间复杂度为n*log2(n),执行效率较高。
  • 熟悉排序的二分查询方法,熟悉lower_bound或者upper_bound
dd305146c8a36d487a5563e83a765d25.png
了解字典排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值