The brute force method would be calculate all the substrings, which would be inefficient.
Runtime Complexity O(m + n)
Space Complexity O(m+n)
class Solution {
public String minWindow(String s, String t) {
int tLen = t.length();
int sLen = s.length();
if (tLen > sLen)
return "";
int[] pattern = new int[256];
int[] given = new int[256];
for (int i = 0; i < tLen; i++)
pattern[t.charAt(i)]++;
int mstart = 0, size = 0, start = 0, min = sLen + 1;
for (int j = 0; j < s.length(); j++) {
char curr = s.charAt(j);
if (given[curr] < pattern[curr])
size++;
given[curr]++;
if (size == tLen) {
while (given[s.charAt(start)] > pattern[s.charAt(start)]) {
given[s.charAt(start)]--;
start++;
}
int len = j - start + 1;
if (len < min) {
min = len;
mstart = start;
}
}
}
if (size < tLen)
return "";
return s.substring(mstart, mstart + min);
}
}