题意

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—最小覆盖字串相关推荐

  1. 双指针算法之滑动窗口 | 力扣76.最小覆盖字串

    本文讲解力扣76.最小覆盖字串问题 主要用到的是滑动窗口的思想 目录 76.最小覆盖字串 题目: 分析: 步骤描述: 复杂度分析: 结果 76.最小覆盖字串 题目: 给定字符串 S 以及字符串 T , ...

  2. 力扣76,最小覆盖字串(JavaScript)

    通过遍历字符串 t,整理t中出现的字符(key)和次数(value),保存在map中,然后遍历字符串s var minWindow = function(s, t) {let r=l=0let len ...

  3. leetcode必刷题(四)lee75 颜色分类、lee76 最小覆盖字串、lee78 子集、lee79 单词搜索、lee84 柱状图中最大的矩形、lee85 最大矩形、lee96 不同的二叉搜索树、

    lee75 颜色分类 patition 三个指针 lee76 最小覆盖字串 滑动窗口 lee78 子集 无重复数字 回溯 lee79 单词搜索 回溯 lee84 柱状图中最大的矩形 单调栈 lee85 ...

  4. 【LeetCode】76. 最小覆盖子串 (Java代码)

    [LeetCode]76. 最小覆盖子串 (Java代码) 来源:力扣(LeetCode) 题目链接:https://leetcode.cn/problems/minimum-window-subst ...

  5. 最小覆盖字串—leetcode76

    难度困难441 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = &q ...

  6. leetcode76:最小覆盖字串(滑动窗口)

    一:题目 二:思路 思路拿别人的,感觉写的很nice!! 渣渣杰只能膜拜大佬的了 1.滑动窗口的思想: left 指针和 ring 指针,保证两个指针之间的字符串包含所需要的全部字符. 2在保证 1 ...

  7. Leetcode 76最小覆盖子串77组合78子集

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...

  8. LeetCode 76. 最小覆盖子串 (滑动窗口哈希表)

    LeetCode 76. 最小覆盖子串 思路: 准备一个map1记录字符串t(字符, 字符个数) 准备一个map2记录在s的窗口中所包含的t串字符(字符,字符个数) 左端点收缩条件:窗口内已经覆盖了t ...

  9. LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波

    LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从 ...

最新文章

  1. 计算机的学生该怎么做?
  2. uniapp 的使用
  3. bzoj1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
  4. 5G之争,到底争些什么?
  5. Linux_日志管理介绍(一)
  6. Java面典_【Java实用工具】——使用oshi获取主机信息
  7. 【python教程入门学习】学python要多久,0基础学python有多难
  8. bzoj 2962 序列操作 线段树
  9. 无需训练 RNN 或生成模型,如何编写一个快速且通用的 AI “讲故事”项目?
  10. 华为MUX VLAN原理和实验
  11. SPSS 相关系数例题、斯皮尔曼相关系数SPSS分析
  12. 经典数字电路 设计案例
  13. APP中使用UI交互设计动效的三个好处
  14. MCE公司:新型STAT3抑制剂
  15. 什么是马甲包?有什么作用?
  16. 基于STM32的电机--电机概述
  17. Oracle使用默认用户登陆时,conn sys/密码 as sysdba,密码怎么是什么都行啊?
  18. 2018年最新税收分类编码_我们正在建立有关新编码员的庞大开放数据集。 2018年新编码器调查现已上线。...
  19. 单载波频域均衡matlab,一种用于单载波频域均衡信道的低复杂度均衡方法与流程...
  20. 传统医学师承人员跟师学满三年才能参加出师考核

热门文章

  1. centos 自定义开机启动service
  2. 【STM32常见错误】error: #29: expected an expression 解决方法
  3. 软件及其应用改变了零售业
  4. html表单按钮有,用好表单的按钮(一)_html
  5. 实习第2,3天,Java实习开发手册
  6. 广州大学松田学院 嵌入式linux,试析广州大学松田学院校园网综合布线工程
  7. 新零售边界的“突破”点是什么 新零售模式下新型供应链数字化系统怎么样?
  8. copilot 常用快捷键
  9. awk 学习(三) 应用示例+
  10. selenium定位元素的方法