031_最小覆盖子串

知识点:滑动窗口

LeetCode第七十六题:https://leetcode-cn.com/problems/minimum-window-substring/submissions

语言:GoLang

func minWindow(s string, t string) string {
    tLen := len(t)
    sLen := len(s)

    tChars := map[byte]int{}
    window := map[byte]int{}

    for i := 0; i < tLen; i++ {
        tChars[t[i]]++
    }

    start, minLen, count, left, right := 0, sLen + 1, 0, 0, 0
    for right < sLen {
        rightChar := s[right]

        if window[rightChar] < tChars[rightChar] {
            count++
        }

        window[rightChar]++
        right++

        for count == tLen {
            if right - left < minLen {
                minLen = right - left
                start = left
            }

            leftChar := s[left]
            if window[leftChar] <= tChars[leftChar] {
                count--
            }
            window[leftChar]--
            left++
        }
    }

    if minLen == sLen + 1 {
        return ""
    }

    return s[start: start + minLen]
}
posted @ 2020-03-22 16:40  Cenyol  阅读(62)  评论(0)    收藏  举报