1. 思路

  1. 做法是控制满足条件的区间大小
  2. 编码思路来源于nbgao,下面是加了注释的源代码

2. 源代码

#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;
    int n=0, m=0;
    cin>>n>>m;
    cin>>s;
    int l=0, r=0, a=0, b=0, Max=0;//控制左右移动区间
    for(;r<=n;r++){//r右边界一直移动
        if(s[r]=='a')//当前为a 则a数量++
            a++;
        else
            b++;//为b 则b数量++
        if(a>m && b>m){//a超出m的数量 并且b超出m数量的这一瞬间
            Max = max(Max, r-l);//确定当前区间大小
            if(s[l]=='a')//查看左边第一个是a还是b 准备区间右移一格 同时去掉积累量 再进行循环查看
                a--;
            else
                b--;
            l++;
        }
    }
    Max = max(Max, r-l);
    cout<<Max<<endl;
    return 0;
}