[LeetCode] 438. Find All Anagrams in a String java

来源:互联网 发布:赛扬n3150能否优化 编辑:程序博客网 时间:2024/05/21 19:04
   /**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)

0 0
原创粉丝点击