二分查找

用一个p数组来存所有小写字母在s中的下标。然后对于每个要询问的单词,我们假设要找到单词中的某个字母在s中的位置,而它前一个字母在s中的位置为idx,则我们可以利用二分查找在p数组中这个字母在下标idx之后的第一个位置(基于贪心的思想),如果没找到,说明该单词不存在;否则找到了这个字母,更新idx,继续向后查找。

class Solution {
public:int numMatchingSubseq(string s, vector<string>& words) {vector<vector<int>> p(26);for(int i=0;i<s.size();i++) p[s[i]-'a'].push_back(i);int ans=0;for(auto ss:words){int idx=-1;bool ok=1;for(int i=0;i<ss.size();i++){auto q=upper_bound(p[ss[i]-'a'].begin(),p[ss[i]-'a'].end(),idx);if(q==p[ss[i]-'a'].end()){ok=0;break;}idx=*q;}if(ok) ans++;}return ans;}
};

时间复杂度:O(d+nlogn),d为s串的长度,n为所有待询问的单词的长度之和

空间复杂度:O(d)

Leetcode792-匹配子序列的单词数相关推荐

  1. leetcode792. 匹配子序列的单词数

    给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数. 示例: 输入: S = "abcde" words = ["a" ...

  2. LeetCode 792. 匹配子序列的单词数(Number of Matching Subsequences)

    792. 匹配子序列的单词数 792. Number of Matching Subsequences 相似题目 392. 判断子序列 转载于:https://www.cnblogs.com/hgli ...

  3. 392.判断子序列 | 792.匹配子序列的单词数

    392. 判断子序列 labuladong 题解思路 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成 ...

  4. 20200209:匹配子序列的单词数(leetcode792)

    匹配子序列的单词数 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 本题最简明的思路依然是暴力法,第一时间想到的是对S的所有字符进行组合枚举,但看了一下S的长度是50000以内,所以放弃枚举 ...

  5. 青铜三人行之匹配子序列的单词数

    先说一个消息,为了方便互相交流学习,青铜三人行建了个微信群,感兴趣的伙伴可以扫码加下面的小助手抱你入群哦! 每周一题,代码无敌~这次让我们换换口味,讨论一个稍微偏实际一点的问题: 视频 青铜三人行-- ...

  6. LeetCode 0792. 匹配子序列的单词数

    [LetMeFly]792.匹配子序列的单词数 力扣题目链接:https://leetcode.cn/problems/number-of-matching-subsequences/ 给定字符串 s ...

  7. LC792. 匹配子序列的单词数

    LC792. 匹配子序列的单词数题解 题目来源LC792. 匹配子序列的单词数 题干 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 ...

  8. Leetcode 792. 匹配子序列的单词数

    Leetcode 792. 匹配子序列的单词数 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 是从原始字符串中生成的新字符串,可以 ...

  9. Leetcode 792. 匹配子序列的单词数 C++

    Leetcode 792. 匹配子序列的单词数 题目 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数. 示例: 输入: S = "abcde&q ...

  10. LeetCode每日一题——792. 匹配子序列的单词数

    LeetCode每日一题系列 题目:792. 匹配子序列的单词数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给定字符串 s 和字符串数组 words, 返回 w ...

最新文章

  1. oracle中间件微信公众号,对TP5.1中间件融合微信公众号代码的优化
  2. c语言程序检测进程pid,C语言实现由PID获取进程名由进程名获取PID
  3. 系列(五)—MySql
  4. 应用环境下的TIME_WAIT和CLOSE_WAIT
  5. LeetCode 816. 模糊坐标
  6. 本机不装Oracle,使用plsql连接远程Oracle的方法
  7. Spring Cloud Alibaba入门简介
  8. spython_spython
  9. 私塾在线java设计模式综合项目实战
  10. 海康威视错误代码说明(一)(错误代码:1~14)
  11. callmode php_phper必须了解的php常识
  12. Kali Linux工具大全-信息收集
  13. 使用Python开发小说下载器,不再为下载小说而发愁
  14. 【Windows】win10如何拦截弹窗?
  15. DeFi 2.0的LaaS协议,重振DeFi赛道发展的关键
  16. 曹鹏 其言其人 2009-06-15 17:44
  17. 第二十一章 数据库角色
  18. 单片机简单Log日志封装
  19. 使用Squid架设代理服务器实现局域网共享上网
  20. [MM32生态]EVB-L0136开发学习分享

热门文章

  1. 重磅盘点:世界名校计算机专业必读的10本经典神书
  2. vmware虚拟机Ubuntu16系统网络配置
  3. 想要提升英语阅读能力的小伙伴建议收藏!
  4. transferto方法的应用_FileChannel中transferTo方法的使用
  5. JS 实现 Div 向上浮动
  6. 一文总结GitHub使用指南
  7. Polyworks脚本开发学习笔记(二)-TREEVIEW基本操作
  8. 周界地址模块接线_入侵报警系统报警探测器和地址码模块的连接方法
  9. 【转载】ddr3参数-内存系列一:快速读懂内存条标签
  10. 深入理解Kubelet