using System;
using System.Collections.Generic;


class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param S string字符串 
     * @param T string字符串 
     * @return string字符串
     */
    public string minWindow (string S, string T) {
        int left = 0, right = 0;
        Dictionary<char, int> dic = new Dictionary<char, int>();
        for(int i = 0; i < T.Length; i++){
            if(!dic.ContainsKey(T[i])) dic[T[i]] = 0;
            dic[T[i]]++;
        }
        int need = 0;
        int start = 0;
        int len = S.Length + 1;
        while(right < S.Length){
            //Console.WriteLine("right:"+right);
            if(dic.ContainsKey(S[right])){
                if(--dic[S[right]] == 0) need++;
            }
            while(need == dic.Count){
                if(right - left + 1 < len){
                    start = left;
                    len = right - left + 1;
                }
                if(dic.ContainsKey(S[left])){
                    if(dic[S[left]]++ == 0) need--;
                    //Console.Write("left:"+left+"need:"+need);
                }
                left++;
            }
            right++;
        }
        if(len == S.Length + 1) return "";
        return S.Substring(start, len);
    }
}