最小覆盖字串
/**
* @param {string} s
* @param {string} t
* @return {string}
*/
var minWindow = function(s, t) {
var ms=new Map(),mt=new Map(),ck=new Map(),sum=0,l=0,ans=s;
for(let i=0;i<t.length;i++)
{
if(!mt.get(t[i]))sum++;
mt.set(t[i],(mt.get(t[i])||0)+ 1);
}
//console.log(sum);
for(let i=0;i<s.length;i++)
{
ms.set(s[i], (ms.get(s[i]) || 0) + 1);
if(mt.get(s[i])&&mt.get(s[i])==ms.get(s[i])){
//console.log(i+'\n');
if(!ck.get(s[i])){
ck.set(s[i],1);
sum--;
}
}
//console.log(ms[s[i]]);
//console.log(ms.get('B')+" "+i+' '+l+'\n');
if(mt.get(s[i])<=ms.get(s[i])){
if(sum==0){
while(!mt.get(s[l])||(mt.get(s[l])&&ms.get(s[l])>mt.get(s[l])))
{
if(mt.get(s[l]))ms.set(s[l], ms.get(s[l]) - 1);
l++;
if(l==s.length)break;
//console.log(ms.get('B')+' '+l+i+'\n');
}
if(ans.length>i-l+1)
{
ans=s.slice(l,i+1);
}
}
//console.log(l+" "+i+'\n'+sum)
}
}
while(!mt.get(s[l])||mt.get(s[l])&&ms.get(s[l])>mt.get(s[l]))
{
ms.set(s[l], ms.get(s[l]) - 1);
l++;
if(l==s.length)break;
}
//console.log(l);
if(ans.length>s.length-l)
{
ans=s.slice(l);
}
//console.log(sum);
if(sum!=0)return "";
return ans;
};Last updated