感觉这道题很简单啊,应该想彻底了再看题解的....
题意:
思路:
因为一个合法的区间的.的个数必须<=k,因此直接考虑双指针即可
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=2e5+10;
string s;
int K;
int pre[mxn];
signed main(){
cin>>s>>K;
int n=s.size();
s=" "+s;
for(int i=1;i<=n;i++){
if(s[i]=='X') pre[i]=pre[i-1];
else pre[i]=pre[i-1]+1;
}
//for(int i=1;i<=n;i++) cout<<pre[i]<<" \n"[i==n];
int ans=-1e9;
int r=1;
for(int l=1;l<=n;l++){
while(r<=n&&pre[r]-pre[l-1]<=K) r++;
r--;
ans=max(ans,r-l+1);
}
cout<<ans<<'\n';
return 0;
}