字符串的排列 - C++力扣567题

题目链接:https://leetcode.com/problems/permutation-in-string/description/

解题思路

这题就是考验滑动窗口算法,难度算是中等偏下吧,很多人一开始认为要用字符串匹配,但是仔细阅读题目之后你会发现如果你用字符串匹配的话你得把所有的可能都列出来,那样的话铁定超时,这题其实套一个基本的滑动窗口的模板就行了。

完整代码:

class Solution {
public:
    bool checkInclusion(string s1, string s2) {
        int cnt[26] = {0};
        for(auto c : s1) cnt[c - 'a']++;

        int left = 0, right = 0;
        while(right < s2.size()) {
            cnt[s2[right] - 'a']--;
            while(cnt[s2[right] - 'a'] < 0) {
                cnt[s2[left] - 'a']++;
                left++;
            }
            if(right - left + 1 == s1.size()) return true;
            right++;
        }
        return false;
    }
};