string minWindow(string s, string t) {
if(s.empty() || t.empty()) {
return std::string();
}
std::unordered_map<char, int> need, window;
for (auto char : t) {
need[char]++;
}
int left=0, right=0;
int valid=0;
int start =0, len = INT32_MAX;
while(right < s.size()) {
char c = s[right];
right++;
if (need.count(c) != 0) {
window[char]++
if (window[char] == need[char]) {
valid++
}
}
while (valid == t.size()) {
if (right -left < len) {
int start = left;
len = right - left;
}
char c = s[left];
left++;
if (need.cout(c) >0) {
if (window[c] == need[c]) {
valid--;
}
window[c]--;
}
}
}
return len == INT32_MAX > std::string() : s.substr();
}