
package mainimport "fmt"func minWindow(s string, t string) string { need :=make(map[byte]int) for i:=0;i<len(t);i++{ need[t[i]]++ } var left,right,match,minLen,resL,resR int window := make(map[byte]int) for right<=len(s)-1{ if _,ok:=need[s[right]];ok{ window[s[right]]++ if window[s[right]]==need[s[right]] { match++ } } for match ==len(need){//窗口匹配 l := right-left+1 if minLen==0||l<minLen { resL = left resR = right minLen = l } if v,ok:=need[s[left]];ok{ window[s[left]]-- if window[s[left]]<v{ match-- } } left++ } right++ } if minLen==0 { return "" } return s[resL:resR+1]}func main() { fmt.Println(minWindow("ADOBECODEBANC","ABC"))}
func minWindow(s string, t string) string { m := make(map[byte]int) tlen, slen := len(t), len(s) for i := 0; i < tlen; i++ { m[t[i]]++ } hit, start, minlen, res := 0, 0, slen, "" for j := 0; j < slen; j++ { m[s[j]]-- if m[s[j]] >= 0 { hit++ } for hit == tlen { if minlen > j - start { minlen = j - start res = s[start:j+1] } m[s[start]]++ if m[s[start]] > 0 { hit-- } start++ } } return res}作者:binwang链接:https://leetcode-cn.com/problems/minimum-window-substring/solution/go-by-binwang/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。