思想
- 右指针右移之后窗口数据更新
- 判断窗口是否要收缩
- 左指针右移之后窗口数据更新
- 根据题意计算结果
模板
func minWindow(s string, t string) string { wind := make(map[byte]int) need := make(map[byte]int) for i := range t { need[t[i]]++ } left, right, match, start, end, min := 0, 0, 0, 0, 0, math.MaxInt32 for right < len(s) { //右移窗口 c := s[right] right++ //进行窗口内数据的一系列更新 if need[c] != 0 { wind[c]++ if wind[c] == need[c] { match++ } } //判断左侧窗口是否要收缩 for match == len(need) { //根据题意计算结果 if right-left < min { min = right - left start = left end = right } // 左指针右移窗口 c = s[left] left++ //进行窗口内数据的一系列更新 if need[c] != 0 { if wind[c] == need[c] { match-- } wind[c]-- } } } if min == math.MaxInt32 { return "" } return s[start:end] }