题目链接:题目链接
用两个数组numa[i],numb[i]分别表示从1~i中a和b的个数
则num[x]-num[y-1]表示区间[y,x]中a,b的个数
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int main()
{
char a[N];
int numa[N];
int numb[N];
int n,k;
int l,r;
int i,ans=0;
memset(numa,0,sizeof(numa));
memset(numb,0,sizeof(numb));
int num1=0,num2=0;
scanf("%d%d",&n,&k);
scanf("%s",a+1);
for(i=1;i<=n;i++)
{
if(a[i]=='a')
num1++;
else
num2++;
numa[i]=num1;
numb[i]=num2;
}
for(l=1,r=1;l<=n&&r<=n;r++)
{
num1=numa[r]-numa[l-1];
num2=numb[r]-numb[l-1];
if(min(num1,num2)>k)
{
ans=max(ans,r-l);
l++;
}
if(r==n&&min(num1,num2)<=k&&r-l+1>ans)
ans=r-l+1;
}
printf("%d\n",ans);
return 0;
}