**](https://i-blog.csdnimg.cn/blog_migrate/950b9b4c31db6749d73c38f834132027.png)

这里有一个很重要的思想要学会:分别记录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;
}
本文介绍了一种优化的字符串处理算法,通过记录1和0的下标,能够快速计算出最大连续相同字符的数量,适用于需要频繁处理二进制字符串的场景。

被折叠的 条评论
为什么被折叠?



