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=0let right=0let 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.sizelet 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=newStrif(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))
'