这里有一个很重要的思想要学会:分别记录1,0下标,方便后续直接处理
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
vector<ll>v1,v0;
int main()
{
ll n,k;
cin>>n>>k;
string s;
cin>>s;
v1.push_back(-1);
v0.push_back(-1);
for(ll i=0;i<n;i++)
{
if(s[i]=='0') v0.push_back(i);
else v1.push_back(i);
}
v1.push_back(n);
v0.push_back(n);
ll ans=0;
if(v1.size()-2<=k) ans=n;
else
{
for(ll i=1,j=k;j<v1.size()-1;i++,j++)
{
ans=max(ans,v1[j+1]-v1[i-1]-1);
}
}
if(v0.size()-2<=k) ans=n;
else
{
for(ll i=1,j=k;j<v0.size()-1;i++,j++)
{
ans=max(ans,v0[j+1]-v0[i-1]-1);
}
}
cout<<ans<<endl;
}