思路:
利用二分搜索和前缀和解决。
AC:
#include<iostream>
#include<algorithm>
using namespace std;
int n, k;
string s;
int sum[100005];
int check(int x)
{
for(int i=0 ; i+x<=n ; i++)
{
if (sum[i+x]-sum[i]>=x-k || sum[i + x]-sum[i]<=k)
return 1;
}
return 0;
}
int main()
{
cin >> n >> k >> s;
sum[0] = 0;
for (int i = 0; s[i]; i++)
{
if (s[i] == 'b')
sum[i + 1] = sum[i] + 1;
else
sum[i + 1] = sum[i];
}
//二分答案
int L = 1, R = n, ans;
while (L <= R)
{
int mid = (L + R) / 2;
//检查成功,mid可以是答案,继续搜索
if (check(mid))
ans = mid, L = mid + 1;
else
R = mid - 1;
}
cout << ans << endl;
return 0;
}