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;
}
京公网安备 11010502036488号