Loading

剑指 Offer II 014. 字符串中的变位词

剑指 Offer II 014. 字符串中的变位词

思路: 只要找出 s1 是不是s2的连续子串。想到的就是滑动窗口。具体:使用一个 26大小的数组,计算 s1 每个字母出现的次数,然后在 s2 上滑动计算即可。当我们开始时 ,得到一个字母 -'a' = 下标 ,数组[下标 ] 如果大于 0 ,则表示窗口[ left ,right] 内 这个字母多了,则要从左边缩小窗口直到剔除相同的字母,每次剔除完以后,判断 left -right+1 == s2长度。如果是则表示是子串。
class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int [] cut =new int [26];
        for(int i=0 ;i< s1.length();i++){
            cut[s1.charAt(i)-'a']--;
        }
        int left =0;
        // 初始化窗口:[left,right]
        for(int right=0;right<s2.length();right++){
            int index=s2.charAt(right)-'a';
            cut[index]++; // right 窗口右移
            while(cut[index]>0){
                cut[s2.charAt(left++)-'a']--; // left 窗口右移
            }
            if(right-left+1==s1.length()) return true;
        }
        return false;
    }
}
posted @ 2022-02-27 15:38  Lsummer  阅读(72)  评论(0)    收藏  举报