package top100liked import "testing" // https://leetcode.cn/problems/minimum-window-substring/?envType=study-plan-v2&envId=top-100-liked func minWindow(s string, t string) string { if len(t) > len(s) { return "" } need := make(map[byte]int) for _, v := range []byte(t) { need[v]++ } window := make(map[byte]int) valid := 0 left := 0 minLen := len(s) + 1 start := 0 for right := 0; right < len(s); right++ { ch := s[right] if _, ok := need[ch]; ok { window[ch]++ if window[ch] == need[ch] { valid++ } } for valid == len(need) { if right-left+1 < minLen { minLen = right - left + 1 start = left } d := s[left] left++ if _, ok := need[d]; ok { if window[d] == need[d] { valid-- } window[d]-- } } } if minLen == len(s)+1 { return "" } return s[start : start+minLen] } func TestS12(t *testing.T) { println(minWindow("ADOBECODEBANC", "ABC")) println(minWindow("a", "a")) println(minWindow("a", "aa")) }