Leecode:Minimum Window Substring(JS解答)
思路解析:
将t变为一个对象存储每一个不同的字符,同时建立一个临时对象存储遍历时的字符,此处这么处理主要是为了应对t中有重复字符的情况
使用left,right两个指针,起始点都在最左端,先是right右移,当满足其中包含t的时候,left指针开始右移,缩小临时字符串的长度
上代码:
function minWindow(s: string, t: string): string {
var tStringMap:any = {},
tempStringMap:any = {};
for(var i = 0; i < t.length; i++){
if(!tStringMap.hasOwnProperty(t.charAt(i))){
tStringMap[t.charAt(i)] = 0
}
tStringMap[t.charAt(i)]++;
}
var left:number = 0,
right:number = -1;
var lTemper:number = -1,rTemper:number = -1;
var resLen:number = Number.MAX_SAFE_INTEGER;
while (right < s.length){
right++;
if(right < s.length && tStringMap.hasOwnProperty(s.charAt(right))){
if(!tempStringMap.hasOwnProperty(s.charAt(right))){
tempStringMap[s.charAt(right)] = 0;
}
tempStringMap[s.charAt(right)]++;
}
while(check() && left <= right){
if(right-left+1 < resLen){
resLen = right-left+1;
lTemper = left;
rTemper = right+1;
}
if(tStringMap.hasOwnProperty(s.charAt(left))){
tempStringMap[s.charAt(left)]--;
}
left++;
}
}
function check():boolean {
for(var key in tStringMap){
var val = tempStringMap.hasOwnProperty(key)?tempStringMap[key]:0;
if(val < tStringMap[key]){
return false;
}
}
return true;
}
return lTemper == -1? "": s.slice(lTemper,rTemper);
};