剑指 Offer II 015. 字符串中的所有变位词(438. 找到字符串中所有字母异位词)

题目:

 

 

思路:

【1】利用滑动窗口加字符集数组的思想(还有官方的题解真鸡儿复杂,感觉一样的思路,看到些那么多就没有看下去了)

代码展示:

利用滑动窗口加字符集数组的思想的方式:

//时间7 ms击败75.57%
//内存42.2 MB击败95.1%
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        ArrayList<Integer> res = new ArrayList<>();
        if (p.length() > s.length()) return res;
        //由于s 和 p 仅包含小写字母
        int[] flag1 = new int[26] , flag2 = new int[26];
        for (char ch : p.toCharArray()){
            flag1[ch - 'a'] += 1;
        }
        //利用滑动窗口大的思想,窗口大小为p.length()的大小
        char[] sArr = s.toCharArray();
        for (int i = 0; i < p.length() - 1; i++){
            flag2[sArr[i] - 'a'] += 1;
        }

        for (int i = p.length() - 1; i < sArr.length; i++){
            flag2[sArr[i] - 'a'] += 1;
            if (Arrays.equals(flag1,flag2)) res.add(i + 1 - p.length());
            flag2[sArr[i + 1 - p.length()] - 'a'] -= 1;
        }

        return res;
    }
}

 

posted @ 2023-03-08 15:02  忧愁的chafry  阅读(15)  评论(0编辑  收藏  举报