567. 字符串的排列

567. 字符串的排列

来自 <https://leetcode.cn/problems/permutation-in-string/?envType=study-plan&id=suan-fa-ru-men&plan=algorithms&plan_progress=sc0sqw2> 


class Solution {
public:
    // 滑动窗口思想,往右移动时,右边加一,左边减一
    bool checkInclusion(string s1, string s2) {
        int n=s1.size();
        int m=s2.size();
        if(n>m){
            return false;
        }
        vector<int> nums1(26,0);
        vector<int> nums2(26,0);  // 初始化一致
        for(int i=0;i<n;i++){
            nums1[s1[i]-'a']++;
             nums2[s2[i]-'a']++;
        }
        if(nums1==nums2){
            return true;
        }
        //  nums1!=nums2
        //  m>n
        // 设置一个滑动窗口大小为s1字符串大小,在nums2
        for(int i=n;i<m;i++){
            nums2[s2[i-n]-'a']--; // 左边界往右移动一格,减一
            nums2[s2[i]-'a']++; // 右边界往右移动一格,加一
            if(nums2==nums1){
                return true;
            }
        }
        return false;
    }
};


posted @ 2022-10-14 00:08  努力、奋斗啊  阅读(19)  评论(0编辑  收藏  举报