题目
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).
Example:
Input: S = “ADOBECODEBANC”, T = “ABC”
Output: “BANC”
Note:
If there is no such window in S that covers all characters in T, return the empty string “”.
If there is such window, you are guaranteed that there will always be only one unique minimum window in S.
我的想法
感觉得用hashmap
解答
leetcode solution: Map + Two Pointer
这个可以模版化,所有substring类型的题目都可以用
class Solution {
public String minWindow(String s, String t) {
int[] map = new int[128];
for(char c : t.toCharArray()) {
map[c]++;
}
int start = 0, end = 0, count = t.length();
String res = "";
int minLen = Integer.MAX_VALUE;
while(end < s.length()) {
char c = s.charAt(end);
if(map[c] > 0) {
count--;
}
//经过的字符都是负数
map[c]--;
end++;
while(count == 0) {
if(minLen > end - start) {
res = s.substring(start, end);
minLen = end - start;
}
final char c2 = s.charAt(start);
map[c2]++;
//如果把t中的字符过掉了count++
if (map[c2] > 0) count++;
start++;
}
}
return res;
}
}