public static String minWindow(String source, String target) {
        // write your code
        char[]s=source.toCharArray(), t=target.toCharArray();
        int[] cs=new int[256], ct=new int[256];
        for (char c:t)
            ++ct[c];
        int[]rec={0,0};
        int cc=0, lm=Integer.MAX_VALUE;
        for (int l=0,r=0;r<s.length;++r) {
            if (++cs[s[r]]<=ct[s[r]]) {
                ++cc;
            }
            if (cc==t.length) {
                while (cs[s[l]]>ct[s[l]])
                    --cs[s[l++]];
                if (lm>r-l+1) {
                    lm=r-l+1;
                    rec[0]=l;
                    rec[1]=r+1;
                }
            }
        }
        return source.substring(rec[0],rec[1]);
    }