class Solution {
public:
string minWindow(string s, string t) {
map m_t, exist;
for(int i = 0; i < (int) t.size(); i++) {
m_t[t[i]]++;
exist[t[i]] = 1;
}
int req = (int) m_t.size();
int j = 0;
int min_length = 2e9, idx1 = 0, idx2 = 0;
for(int i = 0; i < (int) s.size(); i++) {
while(req > 0 and j < (int) s.size()) {
if(exist[s[j]] == 1) {
m_t[s[j]]--;
if(m_t[s[j]] == 0) {
req--;
}
}
j++;
}
if(req == 0) {
if(min_length > j - i) {
min_length = j - i ;
idx1 = i;
idx2 = j;
}
}
if(exist[s[i]]) {
m_t[s[i]]++;
if(m_t[s[i]] > 0) {
req++;
}
}
}
if(min_length == 2e9) {
return "";
}
string ret = "";
for(int i = idx1; i < idx2; i++) {
ret += s[i];
}
return ret;
}
};