The fast 7ms O(N) Java solution use only one array without map
public String minWindow(String s, String t) {\n        if (t.length() <= 0 || s.length() < t.length()) return "";\n        int start = 0, end = 0, i = 0, j = 0,
    public String minWindow(String s, String t) {\n        if (t.length() <= 0 || s.length() < t.length()) return "";\n        int start = 0, end = 0, i = 0, j = 0, count = t.length(), min = s.length()+1;\n        int[] table = new int[256];\n        \n        for(int k = 0; k<count; k++){\n            char c = t.charAt(k);\n            table[c]++;\n        }\n        for(int k = 0; k<256; k++){\n            if(table[k]<1)\n                table[k]=Integer.MIN_VALUE;\n        }\n        while(end<s.length()){\n            while(end<s.length()&&count>0){\n                char c = s.charAt(end++);\n                if(table[c]!=Integer.MIN_VALUE){\n                    if(table[c]>0)\n                        count--;\n                   table[c]--;\n                }\n            }\n            if(count>0) break;\n            while(start<s.length()&&count<=0){\n                char c = s.charAt(start++);\n                if(table[c]!=Integer.MIN_VALUE){\n                    if(table[c]>=0)\n                        count++;\n                   table[c]++;\n                }\n            }\n            if(end-start+1<min){\n                min = end-start+1;\n                i = start-1;\n                j = end;\n            }\n        }\n        return min==s.length()+1 ? "" : s.substring(i,j);\n    }
['Array', 'Dynamic Programming', 'Java']