(1)map+双指针
class Solution {
public:
string minWindow(string s, string t) {
unordered_map<char,int> mp,mp1;
for(int i=0;i<t.length();i++) {
mp[t[i]]++;
mp1[t[i]]++;
}
int count=0,minlen=INT_MAX,start=0;
int index=0;
for(int i=0;i<s.length();i++) {
if(mp.find(s[i])!=mp.end()) {
if(mp[s[i]]<2*mp1[s[i]]) {
count++;
mp[s[i]]++;
if(count==t.length()) {
while(start<=i) {
if(mp.find(s[start])==mp.end()) start++;
else if(mp[s[start]]>2*mp1[s[start]]) {
mp[s[start]]--;
start++;
} else if(i-start+1<minlen) {
minlen=i-start+1;
index=start;
mp[s[start]]--;
start++;
break;
} else {
mp[s[start]]--;
start++;
break;
}
}
count--;
}
} else mp[s[i]]++;
}
}
if(minlen!=INT_MAX) return s.substr(index,minlen);
else return "";
}
};