package com.interview.leetcode.strings;
/**
* Created_By: stefanie
* Date: 14-11-17
* Time: 上午12:11
*/
public class MinWindowSubstring {
public String minWindow(String S, String T) {
if (S == null || S.length() == 0) return S;
if (T == null || T.length() == 0) return "";
int[] tCounter = new int[256]; //count char appear in T
for (int i = 0; i < T.length(); i++) tCounter[T.charAt(i)]++;
int[] mCounter = new int[256]; //count char appear in S
String window = "";
int count = 0, begin = 0;
for (int i = 0; i < S.length(); i++) {
char c = S.charAt(i);
mCounter[c]++;
if (tCounter[c] == 0) continue;
if (mCounter[c] <= tCounter[c]) count ++; //if not a duplication, count one
if (count == T.length()) { //find a substring contains all char, shrink begin
while (begin < S.length()) {
Character ch = S.charAt(begin);
if(mCounter[ch] > tCounter[ch]){
mCounter[ch]--; //have duplication
begin ++;
} else break;
}
if (window == "" || i - begin + 1 < window.length()) window = S.substring(begin, i + 1);
}
}
return window;
}
}