/**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)