Integer 在大于127 的时候 不从常量池里拿,是个对象,所以换成equals 。。。就这个问题,花了我几个小时,最后评论区看到了该问题的解答。。。
class Solution {
public List<Integer> findAnagrams(String s, String p) {
int left =0;
int right = 0;
List<Integer> result = new LinkedList<>();
HashMap<Character,Integer>windows = new HashMap<>();
HashMap<Character,Integer>needs = new HashMap<>();
int match = 0;
for(int i=0;i<p.length();i++){
needs.put(p.charAt(i),needs.getOrDefault(p.charAt(i),0)+1);
}
final int allUnique = needs.size();
while(right<s.length()){
//如果这个元素是需要的
if(needs.containsKey(s.charAt(right))){
windows.put(s.charAt(right),windows.getOrDefault(s.charAt(right),0)+1);
// Integer 在大于127 的时候 不从常量池里拿,是个对象,所以换成equals
if(windows.get(s.charAt(right)).equals(needs.get(s.charAt(right))))
match++;
}
//如果满足条件
while(match == allUnique){
//如果是连续的
if(right-left + 1 == p.length())
result.add(left);
if(needs.containsKey(s.charAt(left))){
windows.put(s.charAt(left),windows.get(s.charAt(left))-1);
if(windows.get(s.charAt(left))<needs.get(s.charAt(left))){
match--;
}
}
left++;
}
right++;
}
return result;
}
}