#include <climits>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param t string字符串
* @return string字符串
*/
bool judge(map<char,int> t, map<char,int> s)\
{
for(auto it=t.begin(); it!=t.end(); ++it)
{
if(it->second>s[it->first])
return false;
}
return true;
}
string minWindow(string s, string t) {
// write code here
map<char,int> t_s, t_t;
for(auto ch:t)
++t_t[ch];
int min_len = INT_MAX;
int left=0, right=0;
int len = s.size();
int start = 0;
while(right<len)
{
if(t_t[s[right]]>0)
{
++t_s[s[right]];
}
++right;
while(judge(t_t, t_s))
{
if(right-left+1<min_len)
{
min_len = right-left+1;
start = left;
}
if(t_t[s[left]])
--t_s[s[left]];
++left;
}
}
return min_len==INT_MAX ? "" : s.substr(start,min_len);
}
};