LeetCode:76.最小覆盖子串
LeetCode:76.最小覆盖子串
+helper divdsx cpv+lean+ ed jux dsks forget Analytics to myself
解题思路先找出所有的包含T的子串。找出长度最小那个子串,返回即可。
用双指针维护一个滑动窗口。移动右指针,找到包含T的子串,移动左指针,尽量减少包含T的子串的长度。
循环上述过程,找出包含T的最小子串。
pic emum cai /radom
时间复杂度:O(m+n),m是t的长度,n是s的长度。空间复杂度:O(m)
/**
* @param {string} s
* @param {string} t
* @return {string}
*/
var minWindow = function(s, t) {
let left=0
let right=0
let map = new Map()
for(let i=0;i<t.length;i++){
map.set(t[i],map.has(t[i])?map.get(t[i])+1:1)
}
//根据 标志 判断 left right 移动的条件
let flagSize=map.size
let minStr=""
let newStr=''
while(right<s.length){
if(map.has(s[right])){
map.set(s[right],map.get(s[right])-1)
if(map.get(s[right])===0) flagSize--;
}
while(flagSize===0){
newStr=s.substring(left,right+1)
if(!minStr||newStr.length<minStr.length) minStr=newStr
if(map.has(s[left])){
map.set(s[left],map.get(s[left])+1)
if(map.get(s[left])===1) flagSize++;
}
left++
}
right++
}
return minStr
};
let s = "ADOBECODEBANC", t = "ABC"
console.log(minWindow(s, t))
'

浙公网安备 33010602011771号