76.最小覆盖子串
76.最小覆盖子串
题解
滑动窗口模板题,不知道为啥这也能算hard题
- 右指针右移之后窗口数据更新
- 判断窗口是否要收缩
- 左指针右移之后窗口数据更新
- 根据题意计算结果
代码
package main import "math" 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 { //可能存在s-->aaaa t-->a, //这里只有当s的最后一个a也被移出窗口的时候 //匹配数才少了1 if wind[c] == need[c] { match-- } wind[c]-- } } } if min == math.MaxInt32 { return "" } return s[start:end] }