1. 思路
- 做法是控制满足条件的区间大小
- 编码思路来源于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; }