/**438. Find All Anagrams in a String * @param s * @param p * @returnList<Integer> 找到子串的开始位置 */ public List<Integer> findAnagrams(String s, String p) { List<Integer> list = new ArrayList<Integer>(); if (s == null || s.length() == 0) return list; int sLen = s.length(); int pLen = p.length(); int[] sArr = new int[26]; int[] pArr = new int[26]; for (int i=0; i<pLen; i++) { pArr[p.charAt(i)-'a']++; } for (int i=0; i<sLen; i++) { sArr[s.charAt(i)-'a']++; if (i >= pLen) { sArr[s.charAt(i-pLen)-'a']--; } if (Arrays.equals(pArr, sArr)) { list.add(i-pLen+1); } } return list; }
//回文构词法:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序 //利用hash的思想,两个数组存储串中字符的个数,注意遍历s时当 i >= plen,之前的元素个数要-1 //java中判断两个数组是否相等:Arrays.equals(arr1,arr2)