题目描述
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
示例输入
s = "ADOBECODEBANC", t = "ABC"
示例输出
"BANC"
报错代码
class Solution {
public String minWindow(String s, String t) {
String result = "";
HashMap<Character, Integer> origin = new HashMap<>(), current = new HashMap<>();
int left = 0, right = 0, differ = 0, minLength = Integer.MAX_VALUE;
for(int i = 0; i < t.length(); ++i) {
if(origin.getOrDefault(t.charAt(i), 0) == 0) {
differ++;
}
origin.put(
t.charAt(i),
origin.getOrDefault(t.charAt(i), 0) + 1
);
}
while(right < s.length()) {
current.put(s.charAt(right), current.getOrDefault(s.charAt(right), 0)+1);
if(current.get(s.charAt(right)) == origin.getOrDefault(s.charAt(right), Integer.MAX_VALUE)) {
differ--;
}
if(differ == 0) {
while(differ == 0) {
if(current.get(s.charAt(left)) > origin.getOrDefault(s.charAt(left), -1)) {
current.put(s.charAt(left), current.get(s.charAt(left)) - 1);
left++;
}
else break;
}
result = (right - left + 1 < minLength) ? s.substring(left, right + 1) : result;
minLength = (right - left + 1 < minLength) ? right - left + 1 : minLength;
}
right++;
}
return result;
}
}
错误原因
java中,Integer作为对象,==
比较的是它们的地址。在-127-128之间的Integer对象,java由于缓存机制会存储它们的实例,因此可以直接用 ==
比较;但是超过这个值时会创造新的对象,需要用equal()。将判等改成equal()后问题解决。
参考
https://developer.baidu.com/article/details/3310477 Java中Integer对象相等性判断:使用==还是equals?