image.png

    1. package main
    2. import "fmt"
    3. func minWindow(s string, t string) string {
    4. need :=make(map[byte]int)
    5. for i:=0;i<len(t);i++{
    6. need[t[i]]++
    7. }
    8. var left,right,match,minLen,resL,resR int
    9. window := make(map[byte]int)
    10. for right<=len(s)-1{
    11. if _,ok:=need[s[right]];ok{
    12. window[s[right]]++
    13. if window[s[right]]==need[s[right]] {
    14. match++
    15. }
    16. }
    17. for match ==len(need){//窗口匹配
    18. l := right-left+1
    19. if minLen==0||l<minLen {
    20. resL = left
    21. resR = right
    22. minLen = l
    23. }
    24. if v,ok:=need[s[left]];ok{
    25. window[s[left]]--
    26. if window[s[left]]<v{
    27. match--
    28. }
    29. }
    30. left++
    31. }
    32. right++
    33. }
    34. if minLen==0 {
    35. return ""
    36. }
    37. return s[resL:resR+1]
    38. }
    39. func main() {
    40. fmt.Println(minWindow("ADOBECODEBANC","ABC"))
    41. }
    1. func minWindow(s string, t string) string {
    2. m := make(map[byte]int)
    3. tlen, slen := len(t), len(s)
    4. for i := 0; i < tlen; i++ {
    5. m[t[i]]++
    6. }
    7. hit, start, minlen, res := 0, 0, slen, ""
    8. for j := 0; j < slen; j++ {
    9. m[s[j]]--
    10. if m[s[j]] >= 0 {
    11. hit++
    12. }
    13. for hit == tlen {
    14. if minlen > j - start {
    15. minlen = j - start
    16. res = s[start:j+1]
    17. }
    18. m[s[start]]++
    19. if m[s[start]] > 0 {
    20. hit--
    21. }
    22. start++
    23. }
    24. }
    25. return res
    26. }
    27. 作者:binwang
    28. 链接:https://leetcode-cn.com/problems/minimum-window-substring/solution/go-by-binwang/
    29. 来源:力扣(LeetCode
    30. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。