class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param S string字符串 
     * @param T string字符串 
     * @return string字符串
     */
    string minWindow(string S, string T) {
        // write code here

        // 双重遍历
        string str = "";

        // 起始位置
        for(int i=0; i<S.size(); ++i)
        {
            // 剪枝
            if(T.find(S[i])!=string::npos)
            {
                string temp = T;
                for(int j=i; j<S.size(); ++j)
                {
                    // 这个要在判断 temp.empty() 之前
                    if(temp.find(S[j])!=string::npos)
                        temp.erase(temp.find(S[j]),1);

                    if(temp.empty())
                    {
                        if(str.empty() || str.size()> j-i+1)
                            str = S.substr(i,j-i+1);
                        cout << j << ", " << i << endl;
                        break;
                    }

                    
                }
            }
        }
        
        return str;
    }
};