Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

Example:

```Input: S = "ADOBECODEBANC", T = "ABC"
Output: "BANC"
```

Note:

• If there is no such window in S that covers all characters in T, return the empty string `""`.
• If there is such window, you are guaranteed that there will always be only one unique minimum window in S.

- 先扫描一遍T，把对应的字符及其出现的次数存到 HashMap 中。

- 然后开始遍历S，就把遍历到的字母对应的 HashMap 中的 value 减一，如果减1后仍大于等于0，cnt 自增1。

- 如果 cnt 等于T串长度时，开始循环，纪录一个字串并更新最小字串值。然后将子窗口的左边界向右移，如果某个移除掉的字母是T串中不可缺少的字母，那么 cnt 自减1，表示此时T串并没有完全匹配。

```class Solution {
public:
string minWindow(string s, string t) {
string res = "";
unordered_map<char, int> letterCnt;
int left = , cnt = , minLen = INT_MAX;
for (char c : t) ++letterCnt[c];
for (int i = ; i < s.size(); ++i) {
if (--letterCnt[s[i]] >= ) ++cnt;
while (cnt == t.size()) {
if (minLen > i - left + ) {
minLen = i - left + ;
res = s.substr(left, minLen);
}
if (++letterCnt[s[left]] > ) --cnt;
++left;
}
}
return res;
}
};```

```class Solution {
public:
string minWindow(string s, string t) {
vector<int> letterCnt(, );
int left = , cnt = , minLeft = -, minLen = INT_MAX;
for (char c : t) ++letterCnt[c];
for (int i = ; i < s.size(); ++i) {
if (--letterCnt[s[i]] >= ) ++cnt;
while (cnt == t.size()) {
if (minLen > i - left + ) {
minLen = i - left + ;
minLeft = left;
}
if (++letterCnt[s[left]] > ) --cnt;
++left;
}
}
return minLeft == - ? "" : s.substr(minLeft, minLen);
}
};```

Github 同步地址：

https://github.com/grandyang/leetcode/issues/76

Substring with Concatenation of All Words

Minimum Size Subarray Sum

Sliding Window Maximum

Permutation in String

Smallest Range

Minimum Window Subsequence

https://leetcode.com/problems/minimum-window-substring/

https://leetcode.com/problems/minimum-window-substring/discuss/26808/Here-is-a-10-line-template-that-can-solve-most-'substring'-problems

LeetCode All in One 题目讲解汇总(持续更新中...)

[LeetCode] 76. Minimum Window Substring 最小窗口子串的更多相关文章

1. [LeetCode] Minimum Window Substring 最小窗口子串

Given a string S and a string T, find the minimum window in S which will contain all the characters ...

2. [leetcode]76. Minimum Window Substring最小字符串窗口

Given a string S and a string T, find the minimum window in S which will contain all the characters ...

3. [LeetCode] 727. Minimum Window Subsequence 最小窗口子序列

Given strings S and T, find the minimum (contiguous) substring W of S, so that T is a subsequenceof  ...

4. [LeetCode] 76. Minimum Window Substring 解题思路

Given a string S and a string T, find the minimum window in S which will contain all the characters ...

5. [LeetCode] 727. Minimum Window Subsequence 最小窗口序列

Given strings S and T, find the minimum (contiguous) substring W of S, so that T is a subsequence of ...

6. Leetcode#76 Minimum Window Substring

原题地址 用两个指针分别记录窗口的左右边界,移动指针时忽略那些出现在S种但是没有出现在T中的字符 1. 扩展窗口.向右移动右指针,当窗口内的字符即将多于T内的字符时,停止右移 2. 收缩窗口.向右调整 ...

7. 刷题76. Minimum Window Substring

一.题目说明 题目76. Minimum Window Substring,求字符串S中最小连续字符串,包括字符串T中的所有字符,复杂度要求是O(n).难度是Hard! 二.我的解答 先说我的思路: ...

8. 【LeetCode】76. Minimum Window Substring

Minimum Window Substring Given a string S and a string T, find the minimum window in S which will co ...

9. [Leetcode] minimum window substring 最小字符窗口

Given a string S and a string T, find the minimum window in S which will contain all the characters ...

随机推荐

1. BOOST.Asio——扫盲

以下内容来自互联网. 鉴于版权之类的东西,我只贴出标题和URL. (无法考证下述资料是否原创.) asio串口编程                                            ...

2. C#:时间转换

1.C#时间转js时间 /// <summary> /// C#时间转js时间 /// </summary> /// <param name="theDate& ...

3. Js内存回收

Javascript的世界中,隐藏了很多内存陷阱,不能得到合理释放的内存会埋下各种隐患,本文旨在以实用角度去解读Js涉及到的内存,且看勇士如何斗恶龙~ javascript 内存 回收 本文可以看做是 ...

4. 洛谷P1288 取数游戏II

题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

6. stack适配栈

#include <stack> stack<int> s; s.empty() 如果栈为空,则返回 true,否则返回 stack s.size() 返回栈中元素的个数 s. ...

7. puppet 横向扩展(二)

Table of Contents 1. 概述 2. 实验环境 3. 实验步骤 3.1. 机器B 的环境 3.1.1. 安装puppetmaster 以及 apache passenger 3.1.2 ...

8. 使用命令行解析php文件

使用命令行解析php文件,这样可以调用Log4PHP库中的一些demo,因为默认的输出使用命令行作为输出. 建一个bat文件: echo 以下是使用命令行解析php文件 C:\xampp\php\ph ...

9. mysql B+tree

什么是索引? 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构. id和磁盘地址的映射. 关系型数据库存在磁盘当中. 为什要用索引? 索引能极大减少存储引擎需要扫描的数据量. 索引可以 ...

10. 初步掌握node的路由控制

1.1.2:node.js的路由控制 1.运行原理 在1.1.1节中,提到过app.js中app.get("/",routes.index)可以用以下代码取代: app.get(& ...