力扣算法题—076最小覆盖子串
给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。
示例:
输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC"
说明:
- 如果 S 中不存这样的子串,则返回空字符串
""
。 - 如果 S 中存在这样的子串,我们保证它是唯一的答案。
1 //使用滑动窗口 2 //我们最开始先扫描一遍T,把对应的字符及其出现的次数存到 HashMap 中。 3 // 4 //- 然后开始遍历S,就把遍历到的字母对应的 HashMap 中的 value 减一,如果减1后仍大于等于0,cnt 自增1。 5 // 6 //- 如果 cnt 等于T串长度时,开始循环,纪录一个字串并更新最小字串值。然后将子窗口的左边界向右移,如果某个移除掉的字母是T串中不可缺少的字母,那么 cnt 自减1,表示此时T串并没有完全匹配。 7 // 8 //解法一: 9 10 class Solution { 11 public: 12 string minWindow(string s, string t) { 13 string res = ""; 14 unordered_map<char, int> letterCnt; 15 int left = 0, cnt = 0, minLen = INT_MAX; 16 for (char c : t) ++letterCnt[c];//记录子串中的相同字母个数 17 for (int i = 0; i < s.size(); ++i) { 18 if (--letterCnt[s[i]] >= 0) ++cnt; 19 while (cnt == t.size()) { 20 if (minLen > i - left + 1) { 21 minLen = i - left + 1; 22 res = s.substr(left, minLen); 23 } 24 if (++letterCnt[s[left]] > 0) --cnt;//还有重复的字母 25 ++left; 26 } 27 } 28 return res; 29 } 30 }; 31 32 33 34 //这道题也可以不用 HashMap,直接用个 int 的数组来代替,因为 ASCII 只有256个字符, 35 //所以用个大小为256的int数组即可代替 HashMap,但由于一般输入字母串的字符只有128个, 36 //所以也可以只用128,其余部分的思路完全相同,虽然只改了一个数据结构,但是运行速度提高了一倍, 37 //说明数组还是比 HashMap 快啊,代码如下: 38 39 40 class Solution { 41 public: 42 string minWindow(string s, string t) { 43 string res = ""; 44 vector<int> letterCnt(128, 0); 45 int left = 0, cnt = 0, minLen = INT_MAX; 46 for (char c : t) ++letterCnt[c]; 47 for (int i = 0; i < s.size(); ++i) { 48 if (--letterCnt[s[i]] >= 0) ++cnt; 49 while (cnt == t.size()) { 50 if (minLen > i - left + 1) { 51 minLen = i - left + 1; 52 res = s.substr(left, minLen); 53 } 54 if (++letterCnt[s[left]] > 0) --cnt; 55 ++left; 56 } 57 } 58 return res; 59 } 60 };
转载于:https://www.cnblogs.com/zzw1024/p/10711855.html
力扣算法题—076最小覆盖子串相关推荐
- 程序员面试需要刷力扣算法题吗
这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...
- LeetCode -- 力扣算法题解题心得 -- (个人笔记记录)持续更新~~
一.前言 正式开启数据结构+算法研究的历程,准备好一年后的面试.下面的解法不一定是最优解,只求能力提升,会定期更新~~ 二.目录 1 2 19 20 21 24 35 42 83 86 94 96 1 ...
- 力扣算法题—042接雨水
1 #include"000库函数.h" 2 //一点头绪都没有 3 //然后就自己按自己的意思来一遍 4 //好像没有用算法 5 //16ms,让我激动一把 6 7 class ...
- “宝石与石头”:一道简单却巧妙的力扣算法题
本篇博客会讲解力扣"771. 宝石与石头"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示: 本题可以使用数组模拟哈希表来实现.先把宝石字符串中的字符标识到数组 ...
- 力扣算法题-19.秋叶收藏集 C语言实现
题目 小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片 ...
- 力扣算法题,第N个神奇数字(Python)
878.第N个神奇数字 题目描述: 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + ...
- 力扣算法题—075颜色分类
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- 力扣算法题(11)动态规划
70-Climbing Stairs (fibonacci数的矩阵计算) //假设你正在爬楼梯,有n阶,每次可以爬1或2阶,有多少种方法可以爬到楼顶. class solution70{int res ...
- 力扣算法题—073矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [[1,1,1],[1,0,1],[1,1,1] ] 输出: [[1,0, ...
最新文章
- python 异常处理 实例_Python 异常处理(示例代码)
- 使用crontab自动化调度jupyter notebook定时运行
- python语言入门w-python基础知识(一)
- ACL 2019 开源论文 | 使用跨领域语言建模的跨领域命名实体识别
- php 8 jit,深入理解PHP8 JIT
- 使用纯css做的按钮
- JDK中DNS缓存的分析
- [css] span与span之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
- Apache安装问题:configure: error: APR not found . Please read the documentation
- Vue封装hbuilder热更新
- 计算机任务栏的操作,win7系统任务栏添加计算机快捷方式的操作方法
- 开源程序安装框架-BitNami
- EasyUI Datagrid换页不清出勾选方法
- JS Grid插件使用
- [python] ylgy攻略 用魔法打败魔法
- (一)阿里云创建自己的产品和设备
- Win10喇叭图标出现红叉提示未安装任何音频输出设备
- [转载野猪的一篇文章] 设计模式--简单工厂模式在unity3d里面的使用
- c语言之数据类型长度
- SCOI2014 方伯伯的玉米田 题解
热门文章
- Go:创建新进程(os.StartProcess源码解读)
- 用sqoop将mysql的数据导入到hive表
- linux command read the content,Linux while 和 read 的用法
- mysql5.5 5.7区别_mysql 5.5 和5.7 安装的区别
- 第1章 Ext JS介绍与快速入门[1/4]
- mybatis plus 日志打印_Mybatis-plus常用API全套教程,看完没有不懂的
- 自己动手写Docker系列 -- 6.3 手动配置容器网络(下)
- java保护访问,Java中的受保护的访问修饰符
- 数据库oracle修改属性列,Oracle修改表结构
- MATLAB图像处理之二值化以及灰度处理