import java.util.*;
public class Solution {
/**
*
* @param S string字符串
* @param T string字符串
* @return string字符串
*/
public String minWindow (String S, String T) {
// write code here
if (S == null || T == null) {
return S == null ? S : T;
}
char[] sArr = S.toCharArray();
char[] tArr = T.toCharArray();
int sLen = sArr.length;
int tLen = tArr.length;
if (sLen < tLen) {
return "";
}
int[] hash = new int[128];
for (char ch : tArr) {
hash[ch]--;
}
int slow = 0;
int fast = 0;
int left = -1;
int right = -1;
int min = sLen + 1;
while (fast < sLen) {
char ch = sArr[fast];
hash[ch]++;
while (check(hash)) {
if (fast - slow + 1 < min) {
min = fast - slow + 1;
left = slow;
right = fast;
}
hash[sArr[slow]]--;
slow++;
}
fast++;
}
if (left == -1) {
return "";
}
return S.substring(left, right + 1);
}
private boolean check(int[] hash) {
for (int i = 0; i < hash.length; i++) {
if (hash[i] < 0) {
return false;
}
}
return true;
}
}