76.最小覆盖字串
题目描述:
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。
示例:
输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"
说明:
如果 S 中不存这样的子串,则返回空字符串 ""。
如果 S 中存在这样的子串,我们保证它是唯一的答案。
思想:滑动窗口
代码:
class Solution { public: string minWindow(string s, string t) { unordered_map<char,int> window,need; int left = 0,right = 0; int valid = 0,start=0,len = INT_MAX; for(int i = 0;i < t.size();i++) need[t[i]]++; while(right<s.size()){ char c = s[right]; right++; if(need.count(c)){ window[c]++; if(window[c] == need[c]) valid++; } 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); } };