| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | package mainfunc minWindow(s string, t string) string {	m, n := len(s), len(t)	if n == 0 {		return ""	}	target, curr := make([]int, 256), make([]int, 256) // A little trick: byte < 256	for i := 0; i < n; i++ {		target[t[i]]++	}	cnt := 0	left, right := -1, -1	minLeft, minRight := -1, m-1	for { // Create a slide window; all chars found, contract left; not enough, expand right.		if cnt != n { // Expand right			right++			if right == m {				break			}			if v := target[s[right]]; v > 0 {				curr[s[right]]++				if curr[s[right]] <= v {					cnt++				}			}		} else { // Contract left			left++			if v := target[s[left]]; v > 0 {				curr[s[left]]--				if curr[s[left]] < v {					cnt--					if right-left < minRight-minLeft {						minLeft, minRight = left, right					}				}			}		}	}	if minLeft == -1 {		return ""	}	return s[minLeft : minRight+1]}// func main() {// 	println(minWindow("ADOBECODEBANC", "ABC"))// 	println(minWindow("", "ABC"))// 	println(minWindow("ADOBECODEBANC", ""))// 	println(minWindow("ADOBECODEBANC", "CC"))// }
 |