LC792. 匹配子序列的单词数
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. 匹配子序列的单词数相关推荐
- LeetCode 792. 匹配子序列的单词数(Number of Matching Subsequences)
792. 匹配子序列的单词数 792. Number of Matching Subsequences 相似题目 392. 判断子序列 转载于:https://www.cnblogs.com/hgli ...
- 392.判断子序列 | 792.匹配子序列的单词数
392. 判断子序列 labuladong 题解思路 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成 ...
- 20200209:匹配子序列的单词数(leetcode792)
匹配子序列的单词数 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 本题最简明的思路依然是暴力法,第一时间想到的是对S的所有字符进行组合枚举,但看了一下S的长度是50000以内,所以放弃枚举 ...
- 青铜三人行之匹配子序列的单词数
先说一个消息,为了方便互相交流学习,青铜三人行建了个微信群,感兴趣的伙伴可以扫码加下面的小助手抱你入群哦! 每周一题,代码无敌~这次让我们换换口味,讨论一个稍微偏实际一点的问题: 视频 青铜三人行-- ...
- LeetCode 0792. 匹配子序列的单词数
[LetMeFly]792.匹配子序列的单词数 力扣题目链接:https://leetcode.cn/problems/number-of-matching-subsequences/ 给定字符串 s ...
- Leetcode 792. 匹配子序列的单词数
Leetcode 792. 匹配子序列的单词数 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 是从原始字符串中生成的新字符串,可以 ...
- Leetcode 792. 匹配子序列的单词数 C++
Leetcode 792. 匹配子序列的单词数 题目 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数. 示例: 输入: S = "abcde&q ...
- LeetCode每日一题——792. 匹配子序列的单词数
LeetCode每日一题系列 题目:792. 匹配子序列的单词数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给定字符串 s 和字符串数组 words, 返回 w ...
- 子序列问-匹配子序列的单词数
792.匹配子序列的单词数 双指针 双指针的最坏计算次数 10^4 * 5000 = 10^7,直接超时 public class Main {public int numMatchingSubseq ...
最新文章
- c++ ofstream 文件不存在_使用C语言中的头文件有什么技巧和注意事项吗?为什么不直接包含C文件呢?...
- Java项目:房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)
- 请问大侠maven怎么添加ms的jdbc驱动啊,1.6jdk
- 微信小程序之生成二维码
- RESTful API版本控制策略
- Spark的三种伪分布式方式
- stm32 复位到内部bootloader
- npm eject 暴露webpack报错,less或sass添加报错
- ajax改变json指向,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)
- VMware Tools显示灰色的办法
- jquery之父john resig见面会及jquery最新动态
- 异常值(outlier)的判别与剔除
- JVM调优实践:记录初次JVM调优经历
- 【旅游热点】金秋十月 “额济纳胡杨林”登内蒙古景区热度榜首
- 关于大屏拼接方案 触摸屏 红外 和 电容屏
- git 基本命令总结
- SpringBoot导出pdf文件学习
- python气象数据分析_基于Python的气象观测数据的解析与存储
- 【学堂在线】C++ 语言程序设计基础 - 课程习题
- C++实现天梯得分排行算法
热门文章
- SQL笔记:SQL中的数据透视表
- 将.ini配置文件转换为.xml文件格式
- 5个简单步骤掌握TensorFlow中的Tensor
- 码出高效:java开发手册_Java 11手册:Java专家分享他们在Java 11方面的最佳和最差的经验
- 软件测试计划或方案都要写吗,软件测试计划书14681857.doc
- unity 3d模型换装的实现与相关注意点
- 学计算机二级的感想,学习计算机二级的心得体会.docx
- 简单实现 iframe 全屏显示
- 振荡器在电路中的作用是什么
- 【Ogre编程入门与进阶】第十五章 Ogre的“二维”与合成特效