滑动窗口/C++

直接上答案滑动一下?

#include <iostream>
#include <string>

using namespace std;

int getMax(string& s, int m, char target){
    int left = 0, right = 0;	// 双指针
    int ans = 0, cnt = 0;
    int n = s.size();
    while(right<n){
        if(s[right]==target){
            right++;
        }
        else{
            // 如果cnt<m,说明还可以继续翻转,此时将其当作'a'继续处理~
            cnt++;
            right++;
            // 要开始考虑left的收缩了
            while(cnt>m){
                if(s[left]!=target){
                    cnt--;
                }
                left++;
            }
        }
        // 这里我没有想到更好的,只能在每次while循环时候都判断一下
        ans = max(ans, right-left);
    }
    return ans;
}

int main(){
    int n, m;
    string str;
    cin >> n >> m;
    cin >> str;
    if(m>=n){
        cout << n << endl;
    }
    // acm的输入输出真的搞得很懵
    else{
        int ans = 0;
        ans = max(getMax(str, m, 'a'), getMax(str, m, 'b'));
        cout << ans << endl;
    }
    
    return 0;
}