目录
题意:
给定一个字符串,由x和.共同组成,现给出一整数k,表示有k次机会将.变为x,问最后连续x最长为多少。
思路:
维护前缀和数组,记录当前位置前有多少个'.',之后分两层枚举左右端点,记录区间的长度,其最大长度即为答案。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{ string s;
int n,a[100000],ans=0,k;
cin>>s>>k;
for(int i=1;i<s.length()-1;i++) //前缀和
{ if(s[i+1]=='.') a[i+1]=a[i]+1;
else a[i+1]=a[i];
}
for(int i=0;i<s.length();i++) //左端点
{ int j=i+1;
while(a[j]-a[i-1]<=k&&j<s.length())
j++;
ans=max(ans,j-i); //娶最长的
}
cout<<ans;
}