/**438. Find All Anagrams in a String * @param s * @param p * @returnList<Integer> 找到子串的開(kāi)始位置 */ 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; }
//回文構(gòu)詞法:?jiǎn)卧~里的字母的種類和數(shù)目沒(méi)有改變,只是改變了字母的排列順序 //利用hash的思想,兩個(gè)數(shù)組存儲(chǔ)串中字符的個(gè)數(shù),注意遍歷s時(shí)當(dāng) i >= plen,之前的元素個(gè)數(shù)要-1 //java中判斷兩個(gè)數(shù)組是否相等:Arrays.equals(arr1,arr2)