76. 最小覆盖子串
class Solution {
public:string minWindow(string s, string t) {unordered_map<char,int>need,window;for(char c:t) need[c]++;int left=0,right=0;int valid=0;           // valid 变量表示窗口中满足 need 条件的字符个数int start=0,len=INT32_MAX;while(right<s.size()){char c=s[right];right++;// 进行窗口内数据的一系列更新if(need.count(c)){window[c]++;if(window[c]==need[c])valid++;}// 什么时候窗口应该暂停扩大,开始移动 left 缩小窗口?while(valid==need.size()){// 我们要的结果应该在扩大窗口时还是缩小窗口时进行更新?if(right-left<len){start = left;len = right-left;}char d = s[left];left++;// 进行窗口内数据的一系列更新if(need.count(d)){if(window[d]==need[d])valid--;window[d]--;}}}// 返回最小覆盖子串return len == INT_MAX ?"" : s.substr(start, len);}
};