package main

/**
  * 
  * @param S string字符串 
  * @param T string字符串 
  * @return string字符串
*/
func minWindow( S string ,  T string ) string {
    if S==""||T==""||len(T)>len(S){return ""}
    tSet:=map[byte]int{}
    for i:=0;i<len(T);i++{
        tSet[T[i]]-=1
    }
    q:=[]int{}
    res:=S
    haveCom:=false
    for i:=0;i<len(S);i++{
        if _,ok:=tSet[S[i]];ok{
            tSet[S[i]]+=1
            q = append(q, i)
        }
        for check(tSet){
            haveCom=true
            if q[len(q)-1]-q[0]<len(res)-1{
                res=S[q[0]:q[len(q)-1]+1]
            }
            tSet[S[q[0]]]-=1
            q=q[1:]
        }
    }
    if !haveCom{return ""}
    return res
}

func check(m map[byte]int)bool{
    for _,v:=range m{
        if v<0{
            return false
        }
    }
    return true
}