LeetCode系列76—最小覆盖字串
题意
76. 最小覆盖子串
题解
方法一:滑动窗口
在滑动窗口类型的问题中都会有两个指针,一个用于「延伸」现有窗口的 r
指针,和一个用于「收缩」窗口的 l
指针。在任意时刻,只有一个指针运动,而另一个保持静止。我们在s
上滑动窗口,通过移动 r
指针不断扩张窗口。当窗口包含 t
全部所需的字符后,如果能收缩,我们就收缩窗口直到得到最小窗口。
时间复杂度:O(|S|+|T|),这里|S|表示字符串S的长度,|T|表示字符串T的长度
空间复杂度:O(|S|+|T|)
相同类型的题还有LeetCode中的3、209、424、438、567题
class Solution {public:string minWindow(string s, string t) {int sLen = s.size();int tLen = t.size();if (sLen == 0 || tLen == 0 || sLen < tLen) {return "";}int distance = 0, left = 0, right = 0;int minLen = sLen + 1, minLeft = 0;int winFreq[128];int tFreq[128];memset(winFreq, 0, 128 * sizeof(int));memset(tFreq, 0, 128 * sizeof(int));for (const char& c : t) {tFreq[c]++;}while (right < sLen) {if (tFreq[s[right]] == 0) {right++;continue;}if (winFreq[s[right]] < tFreq[s[right]]) {distance++;}winFreq[s[right]]++;right++;while (distance == tLen) {if (right - left + 1 < minLen) {minLen = right - left + 1;minLeft = left;}if (tFreq[s[left]] == 0) {left++;continue;}if (winFreq[s[left]] == tFreq[s[left]]) {distance--;}winFreq[s[left]]--;left++;}}return minLen == sLen + 1 ? "" : s.substr(minLeft, minLen);}
};
另一种解法
class Solution {public:unordered_map <char, int> ori, cnt;bool check() {for (const auto &p: ori) {if (cnt[p.first] < p.second) {return false;}}return true;}string minWindow(string s, string t) {for (const auto &c: t) {++ori[c];}int l = 0, r = -1;int len = INT_MAX, ansL = -1, ansR = -1;while (r < int(s.size())) {if (ori.find(s[++r]) != ori.end()) {++cnt[s[r]];}while (check() && l <= r) {if (r - l + 1 < len) {len = r - l + 1;ansL = l;}if (ori.find(s[l]) != ori.end()) {--cnt[s[l]];}++l;}}return ansL == -1 ? string() : s.substr(ansL, len);}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/minimum-window-substring/solution/zui-xiao-fu-gai-zi-chuan-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
LeetCode系列76—最小覆盖字串相关推荐
- 双指针算法之滑动窗口 | 力扣76.最小覆盖字串
本文讲解力扣76.最小覆盖字串问题 主要用到的是滑动窗口的思想 目录 76.最小覆盖字串 题目: 分析: 步骤描述: 复杂度分析: 结果 76.最小覆盖字串 题目: 给定字符串 S 以及字符串 T , ...
- 力扣76,最小覆盖字串(JavaScript)
通过遍历字符串 t,整理t中出现的字符(key)和次数(value),保存在map中,然后遍历字符串s var minWindow = function(s, t) {let r=l=0let len ...
- leetcode必刷题(四)lee75 颜色分类、lee76 最小覆盖字串、lee78 子集、lee79 单词搜索、lee84 柱状图中最大的矩形、lee85 最大矩形、lee96 不同的二叉搜索树、
lee75 颜色分类 patition 三个指针 lee76 最小覆盖字串 滑动窗口 lee78 子集 无重复数字 回溯 lee79 单词搜索 回溯 lee84 柱状图中最大的矩形 单调栈 lee85 ...
- 【LeetCode】76. 最小覆盖子串 (Java代码)
[LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...
- 最小覆盖字串—leetcode76
难度困难441 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = &q ...
- leetcode76:最小覆盖字串(滑动窗口)
一:题目 二:思路 思路拿别人的,感觉写的很nice!! 渣渣杰只能膜拜大佬的了 1.滑动窗口的思想: left 指针和 ring 指针,保证两个指针之间的字符串包含所需要的全部字符. 2在保证 1 ...
- Leetcode 76最小覆盖子串77组合78子集
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...
- LeetCode 76. 最小覆盖子串 (滑动窗口哈希表)
LeetCode 76. 最小覆盖子串 思路: 准备一个map1记录字符串t(字符, 字符个数) 准备一个map2记录在s的窗口中所包含的t串字符(字符,字符个数) 左端点收缩条件:窗口内已经覆盖了t ...
- LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波
LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从 ...
最新文章
- 计算机的学生该怎么做?
- uniapp 的使用
- bzoj1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
- 5G之争,到底争些什么?
- Linux_日志管理介绍(一)
- Java面典_【Java实用工具】——使用oshi获取主机信息
- 【python教程入门学习】学python要多久,0基础学python有多难
- bzoj 2962 序列操作 线段树
- 无需训练 RNN 或生成模型,如何编写一个快速且通用的 AI “讲故事”项目?
- 华为MUX VLAN原理和实验
- SPSS 相关系数例题、斯皮尔曼相关系数SPSS分析
- 经典数字电路 设计案例
- APP中使用UI交互设计动效的三个好处
- MCE公司:新型STAT3抑制剂
- 什么是马甲包?有什么作用?
- 基于STM32的电机--电机概述
- Oracle使用默认用户登陆时,conn sys/密码 as sysdba,密码怎么是什么都行啊?
- 2018年最新税收分类编码_我们正在建立有关新编码员的庞大开放数据集。 2018年新编码器调查现已上线。...
- 单载波频域均衡matlab,一种用于单载波频域均衡信道的低复杂度均衡方法与流程...
- 传统医学师承人员跟师学满三年才能参加出师考核
热门文章
- centos 自定义开机启动service
- 【STM32常见错误】error: #29: expected an expression 解决方法
- 软件及其应用改变了零售业
- html表单按钮有,用好表单的按钮(一)_html
- 实习第2,3天,Java实习开发手册
- 广州大学松田学院 嵌入式linux,试析广州大学松田学院校园网综合布线工程
- 新零售边界的“突破”点是什么 新零售模式下新型供应链数字化系统怎么样?
- copilot 常用快捷键
- awk 学习(三) 应用示例+
- selenium定位元素的方法