> 技术文档 > [leetcode]438. 找到字符串中所有字母异位词

[leetcode]438. 找到字符串中所有字母异位词

Link

class Solution { public List<Integer> findAnagrams(String S, String P) { char[] s = S.toCharArray(), p =P.toCharArray(); int n = s.length, m = p.length; Map<Character,Integer>mp1 = new HashMap<>(); Map<Character,Integer>mp2 = new HashMap<>(); for(char c:p){ mp1.put(c,mp1.getOrDefault(c,0) + 1); } int tar = mp1.size(); int l = 0, r = 0; int cnt = 0; List<Integer>res = new ArrayList<>(); while(r < n){ char c = s[r++]; mp2.put(c,mp2.getOrDefault(c,0) + 1); if(mp2.get(c).equals(mp1.get(c))){ cnt++; } while(r - l > m){ c = s[l++]; if( mp2.get(c).equals(mp1.get(c))) cnt--; mp2.put(c,mp2.get(c) - 1); } if(cnt == tar){ res.add(l); } } return res; }}

这题就是一个简单的定长滑动窗口,但是不要c++写习惯了 java中的HashMap需要用包装类作为泛型,Integer是一个对象,所以==是比较地址
两个if判断中

if(mp2.get(c).equals(mp1.get(c)))

必须用equals方法,而不是==,equals才是比较两个Integer的值相等