题目链接 https://ac.nowcoder.com/acm/contest/3002/H
1. 分析
可以考虑先把0和1的下标存储下来,再求解包含最多 个0(1)的子字符串的最长长度,要特判全0(1)的情况
2. 代码
#include<bits/stdc++.h>
#define FULL(x,y) memset(x,y,sizeof(x))
#define ll long long
using namespace std;
int n,k;
string s;
unordered_map<char,vector<int>> um;
int main() {
cin>>n>>k;
cin>>s;
for(int i=0;i<n;i++) {
um[s[i]].push_back(i);
}
if (!um['0'].size() || !um['1'].size()) {
cout<<n;
return 0;
}
int ans=0;
for(auto a:um) {
vector<int> v=a.second;
int len=v.size();
for(int i=0;i<len;i++) {
int l=(i==0?0:v[i-1]+1);
int r=(i+k>len-1?n:v[i+k]);
ans=max(ans,r-l);
}
}
cout<<ans;
return 0;
}
京公网安备 11010502036488号