Shu-How Zの小窝

Loading...

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))

'

posted @ 2025-01-11 18:32  KooTeam  阅读(20)  评论(0)    收藏  举报