leetcode 792 匹配子序列的单词数(哈希表+双指针)
给定字符串 s
和字符串数组 words
, 返回 words[i]
中是s
的子序列的单词个数 。
字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其余字符的相对顺序。
- 例如,
“ace”
是“abcde”
的子序列。
示例 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 * 104
1 <= words.length <= 5000
1 <= words[i].length <= 50
words[i]
和 s 都只由小写字母组成。
题解:比较两个字符串s和t,其中一个是另外一个子串的问题,可以使用双指针一次遍历。那么这道题目就是在外面再加一层for循环,遍历完所有的字符串数组就可以了。于是我就提交了,发现超时了。。。。既然超时了,那么就要算法优化,删除一些重复的操作。看着超时的测试用例,我忽然就懂了,因为测试的字符串有很多是重复的,所以增加了一个哈希表来去重,这样再遍历一遍哈希表,就可以通过了。具体看代码,使用table[26]是用来提前结束不匹配的情况的优化。
class Solution {
public:int numMatchingSubseq(string s, vector<string>& words) {int sum=0;int table[26]={0};unordered_map<string,int> Hashmap;for(auto ch:s){table[ch-'a']++;}for(auto str:words){Hashmap[str]++;}for(auto p:Hashmap){string temStr=p.first;int k=0;int sk=0;// 计算是否存在bool flag=true;int temptable[26]={0};for(auto i:temStr){temptable[i-'a']++;if(temptable[i-'a']>table[i-'a']){flag=false;break;}}if(flag){while(k<temStr.size() && sk<s.size()){if(temStr[k]==s[sk]){k++;sk++;}else{sk++;}}if(k>temStr.size()-1){sum+=p.second;}}}return sum;}
};
时间168 ms
击败
63.30%
内存42.1 MB
击败
74.64%
leetcode 792 匹配子序列的单词数(哈希表+双指针)相关推荐
- LeetCode 792. 匹配子序列的单词数(二分查找)
文章目录 1. 题目 2. 解题 1. 题目 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数. 示例: 输入: S = "abcde" ...
- 力扣每日一题:792. 匹配子序列的单词数【真没想到是一个二分】
给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其 ...
- Leetcode 792. 匹配子序列的单词数
Leetcode 792. 匹配子序列的单词数 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 . 字符串的 子序列 是从原始字符串中生成的新字符串,可以 ...
- Leetcode 792. 匹配子序列的单词数 C++
Leetcode 792. 匹配子序列的单词数 题目 给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数. 示例: 输入: S = "abcde&q ...
- LeetCode 792. 匹配子序列的单词数(Number of Matching Subsequences)
792. 匹配子序列的单词数 792. Number of Matching Subsequences 相似题目 392. 判断子序列 转载于:https://www.cnblogs.com/hgli ...
- LeetCode每日一题——792. 匹配子序列的单词数
LeetCode每日一题系列 题目:792. 匹配子序列的单词数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给定字符串 s 和字符串数组 words, 返回 w ...
- LeetCode 0792. 匹配子序列的单词数
[LetMeFly]792.匹配子序列的单词数 力扣题目链接:https://leetcode.cn/problems/number-of-matching-subsequences/ 给定字符串 s ...
- 792. 匹配子序列的单词数
792. 匹配子序列的单词数 二分搜索 class Solution {public:bool check(string& w, vector<vector<int>> ...
- 392.判断子序列 | 792.匹配子序列的单词数
392. 判断子序列 labuladong 题解思路 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成 ...
最新文章
- 贡献思想 + 数论 + 思维(例题 Problem J. Prime Game)
- 宽屏企业网站源码中英php_宽屏版大气企业网站源码dede网站源码中英文网站模板SEO...
- 3 数组中的重复数字
- 【复杂系统迁移 .NET Core平台系列】之认证和授权
- SpringCloud之Zuul网关
- AVI视频格式的Dvix和Xvid两种不同编码的区别
- 企业财务分析方法-杜邦分析法、沃尔评分法、Z值模型
- Kafka集群搭建过程(kafka2.5+eagle)
- java用于选择结构的关键字_Java结构
- 一些常见的Java8 循环实例(筛选、基本函数使用,循环等)
- OGNL表达式的入门
- 如何让Echarts地图只显示某个省、市、区
- vue2的堆叠轮播图 (5张图 错开叠加,来回切换)
- C#之AES加密解密
- elasticsearch client依赖包下载方法
- WeCube开源监控插件Open-monitor介绍
- 通信维修专用电源_通信电源的故障维修三例
- idl linux运行效率,Linux性能监控之CPU篇
- 智能制造生产执行与控制
- 论文里的好句子(3)
热门文章
- php 求两个日期之间的天数_php计算两个日期之间的天数
- HTML5简介及新特性
- mysql 主键自增语句_MySQL 自增主键
- 使用PN532复制一张新卡(读卡,写卡)(使用上位机)
- [摘录]第7章 谈判压力点
- Unity 打开关闭外部的exe软件
- coot 无法识别DNA/RNA的解决方法
- sinx、cscx、cosx、secx以及tanx、cotx图像详解
- 2021年茶艺师(初级)考试及茶艺师(初级)考试技巧
- oracle 慕课课程_ORACLE数据库技术,中国大学MOOC(慕课)答案公众号搜题