import java.util.HashMap;
import java.util.Map;
public class Solution {
public String minWindow(String s, String t) {
Map<Character, Integer> tMap = new HashMap<>();
for(char c : t.toCharArray()){
if(tMap.containsKey(c))
tMap.put(c, tMap.get(c)+1);
else
tMap.put(c, 1);
}
for(char c : s.toCharArray()){
if(t.indexOf(c) == -1){
tMap.put(c, 0);
}
}
int count = t.length();
int begin = 0;
int end = 0;
int head = 0;
int tempCount;
int distance = Integer.MAX_VALUE;
while (end < s.length()){
tempCount = tMap.get(s.charAt(end));
if(tempCount > 0) {
count--;
}
tMap.put(s.charAt(end), --tempCount);
end++;
while (count == 0){
if(end - begin < distance){
distance = end - begin;
head = begin;
}
tempCount = tMap.get(s.charAt(begin));
tMap.put(s.charAt(begin), ++tempCount);
if(tempCount > 0){
count++;
}
begin++;
}
}
return distance == Integer.MAX_VALUE ? "" : s.substring(head, head + distance);
}
public static void main(String[] args){
String S = "ADOBECODEBANC";
String T = "ABC";
System.out.println(new Solution().minWindow(S, T));
}
}
[参考资料]
https://leetcode.com/discuss/72701/here-10-line-template-that-can-solve-most-substring-problems