- 判断是否为异位词我最开始想的是通过转换成数组进行sort排序再使用equals进行比较的,这里采用的是使用cnt数组进行计数,最后直接使用Array中的equals方法比较两个数组是否相同来进行判断
- 除了数组,也可以使用HashMap进行计数判断,最后也可以通过Map.equals直接进行判断两个Map是否相等
class Solution {
public List<Integer> findAnagrams(String s, String p) {
int[] cntP = new int[26];
for (char c : p.toCharArray()) {
cntP[c - 'a']++;
}
int n = s.length();
int m = p.length();
List<Integer> ans = new ArrayList<>();
int[] cntS = new int[26];
for (int i = 0; i < n; i++) {
cntS[s.charAt(i) - 'a']++;
int left = i - m + 1;
if (left < 0) {
continue;
}
if (Arrays.equals(cntS, cntP)) {
ans.add(left);
}
cntS[s.charAt(left) - 'a']--;
}
return ans;
}
}