Hard
区别在于因为getOrDefault用不熟,就直接在一开始就把所有的S里面的characters全部加进去了,不过value是0. 这样被window包括之后,value就会变成-1, 在移动start的时候判断value是不是大于0就直到这个char是不是t里面的,需不需要改变count了。
还有注意下substring这个API, 没有substring(int startIndex, int length)这个方法哈,只有
substring(int startIndex, int endIndex)
substring(int startindex)
(to the end)
class Solution {
public String minWindow(String s, String t) {
if (s == null || s.length() == 0){
return "";
}
Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()){
map.put(c, 0);
}
for (char c : t.toCharArray()){
if (!map.containsKey(c)){
map.put(c, 1);
} else{
map.put(c, map.get(c) + 1);
}
}
int minLen = s.length() + 1;
int minStart = 0;
int start = 0;
int end = 0;
int count = t.length();
while (end < s.length()){
char c = s.charAt(end);
if (map.get(c) > 0){
count--;
}
map.put(c, map.get(c) - 1);
while (count == 0){
if (end - start + 1 < minLen){
minLen = end - start + 1;
minStart = start;
}
char ch = s.charAt(start);
map.put(ch, map.get(ch) + 1);
if (map.get(ch) > 0){
count++;
}
start++;
}
end++;
}
return (minLen == s.length() + 1) ? "" : s.substring(minStart, minStart + minLen);
}
}