我的思路
- 先计算子串的字符的ascll码值的和,看看这个值是否相等,我认为可以筛掉一一部分
- 就是子串和要比较的串排序比较是否相等
但是超时,样例太长了
题解思路
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> result = new ArrayList<>();
if(s.length()<p.length()){
return result;
}
int[] parr = new int[26];
int[] sarr = new int[26];
for (int i = 0; i < p.length(); i++) {
parr[p.charAt(i)-'a']++;
sarr[s.charAt(i) - 'a']++;
}
if(Arrays.equals(parr, sarr)){
result.add(0);
}
for (int i = 0; i < s.length() - p.length(); ++i) {
sarr[s.charAt(i)-'a']--;
sarr[s.charAt(i+p.length()) - 'a']++;
if (Arrays.equals(parr, sarr)){
result.add(i+1);
}
}
return result;
}
}
其实应该也是双指针,关键是自己没想到两个数组怎么比较大小,其实也是统计字符次数