Minimum Window Substring
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
- Time: O(n)
- Space: O(1)
public String minWindow(String s, String t) {
int[] count = new int[256];
for (int i = 0; i < t.length(); i++)
count[t.charAt(i)]++;
int start = 0, end = 0, counter = t.length();
int minStart = -1, minEnd = s.length();
while (end < s.length()) {
if (count[s.charAt(end)] > 0)
counter--;
count[s.charAt(end)]--;
end++;
while (counter == 0) {
if (end - start < minEnd - minStart) {
minStart = start;
minEnd = end;
}
count[s.charAt(start)]++;
if (count[s.charAt(start)] > 0) {
counter++;
}
start++;
}
}
return minStart == -1 ? "" : s.substring(minStart, minEnd);
}