LC792. 匹配子序列的单词数题解

题目来源LC792. 匹配子序列的单词数

题干

给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 。

字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其余字符的相对顺序。

例如, “ace” 是 “abcde” 的子序列。

Example 1:

输入: s = “abcde”, words = [“a”,“bb”,“acd”,“ace”]
输出: 3

解释: 有三个是 s 的子序列的单词: “a”, “acd”, “ace”。

Example 2:

输入: s = “dsahjpjauf”, words = [“ahjpjau”,“ja”,“ahbwzgqnuk”,“tnmlanowax”]
输出: 2

提示:

1 <= s.length <= 5 * 10^4
1 <= words.length <= 5000
1 <= words[i].length <= 50
words[i]和 s 都只由小写字母组成。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-matching-subsequences

思路

本思路主要为多指针的方法。

将m个指针都指向每个单词的头字母。然后对整个字符串s遍历,每遍历一个单词则对应的单词指针后移一位,然后维护26个字母的队列,每次对队列中的指针们操作,直到指针指向单词末尾,则结果数+1;

当字符串遍历完毕最后的结果数就是本题要求的结果。

代码

class Solution {public int numMatchingSubseq(String s, String[] words) {Queue<int[]>[] queues = new Queue[26];//创建字母队列for(int i = 0;i<26;i++) queues[i] = new LinkedList<>();for(int i = 0;i< words.length;i++){queues[words[i].charAt(0)-'a'].add(new int[]{i,0});//初始化单词}int ans = 0;for(int i = 0;i<s.length();i++){char c = s.charAt(i);int x = c-'a';int len = queues[x].size();for(int j=0;j<len;j++){int[] arr = queues[x].remove();if(words[arr[0]].length()==arr[1]+1) ans++;//若单词为末尾则结果+1else queues[words[arr[0]].charAt(arr[1]+1)-'a'].add(new int[]{arr[0],arr[1]+1});//否则指针指到下一个字母}}return ans;}
}

  • 时间复杂度:O(n+m*sizei),其中 n 是字符串s 的长度。sizei为对应单词的长度。
  • 空间复杂度:O(m),m是匹配单词数量。

Push myself.

求点赞 关注 评论 不定期更新~

LC792. 匹配子序列的单词数相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 子序列问-匹配子序列的单词数

    792.匹配子序列的单词数 双指针 双指针的最坏计算次数 10^4 * 5000 = 10^7,直接超时 public class Main {public int numMatchingSubseq ...

最新文章

  1. c++ ofstream 文件不存在_使用C语言中的头文件有什么技巧和注意事项吗?为什么不直接包含C文件呢?...
  2. Java项目:房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)
  3. 请问大侠maven怎么添加ms的jdbc驱动啊,1.6jdk
  4. 微信小程序之生成二维码
  5. RESTful API版本控制策略
  6. Spark的三种伪分布式方式
  7. stm32 复位到内部bootloader
  8. npm eject 暴露webpack报错,less或sass添加报错
  9. ajax改变json指向,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)
  10. VMware Tools显示灰色的办法
  11. jquery之父john resig见面会及jquery最新动态
  12. 异常值(outlier)的判别与剔除
  13. JVM调优实践:记录初次JVM调优经历
  14. 【旅游热点】金秋十月 “额济纳胡杨林”登内蒙古景区热度榜首
  15. 关于大屏拼接方案 触摸屏 红外 和 电容屏
  16. git 基本命令总结
  17. SpringBoot导出pdf文件学习
  18. python气象数据分析_基于Python的气象观测数据的解析与存储
  19. 【学堂在线】C++ 语言程序设计基础 - 课程习题
  20. C++实现天梯得分排行算法

热门文章

  1. SQL笔记:SQL中的数据透视表
  2. 将.ini配置文件转换为.xml文件格式
  3. 5个简单步骤掌握TensorFlow中的Tensor
  4. 码出高效:java开发手册_Java 11手册:Java专家分享他们在Java 11方面的最佳和最差的经验
  5. 软件测试计划或方案都要写吗,软件测试计划书14681857.doc
  6. unity 3d模型换装的实现与相关注意点
  7. 学计算机二级的感想,学习计算机二级的心得体会.docx
  8. 简单实现 iframe 全屏显示
  9. 振荡器在电路中的作用是什么
  10. 【Ogre编程入门与进阶】第十五章 Ogre的“二维”与合成特效