/**438. Find All Anagrams in a String
* @param s
* @param p
* @return
*/
public List<Integer> findAnagrams(String s, String p) {
List<Integer> ret = new ArrayList<Integer>();
int slen = s.length();
int plen = p.length();
int[] h1 = new int[26];
int[] h2 = new int[26];
for (int i = 0; i < plen; i++) {
h1[p.charAt(i)-'a']++;
}
for (int i = 0; i < slen; i++) {
h2[s.charAt(i)-'a']++;
if (i >= plen) {
h2[s.charAt(i-plen)-'a']--;//始终保持h2中只有plen个值
}
if (Arrays.equals(h1, h2)) {
ret.add(i-plen+1);
}
}
return ret;
}
//回文构词法:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序
//利用hash的思想,两个数组存储串中字符的个数,注意遍历s时当 i >= plen,之前的元素个数要-1
//Java中判断两个数组是否相等:Arrays.equals(arr1,arr2)
[LeetCode] 438. Find All Anagrams in a String
最新推荐文章于 2021-12-01 23:40:43 发布