传送门:CF 676 C. Vasya and String
描述:
High school student Vasya got a string of length n as a birthday present. This string consists of letters 'a' and 'b' only. Vasya denotesbeauty of the string as the maximum length of a substring (consecutive subsequence) consisting of equal letters.
Vasya can change no more than k characters of the original string. What is the maximum beauty of the string he can achieve?
The first line of the input contains two integers n and k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ n) — the length of the string and the maximum number of characters to change.
The second line contains the string, consisting of letters 'a' and 'b' only.
Print the only integer — the maximum beauty of the string Vasya can achieve by changing no more than k characters.
4 2 abba
4
8 1 aabaabaa
5
In the first sample, Vasya can obtain both strings "aaaa" and "bbbb".
In the second sample, the optimal answer is obtained with the string "aaaaabaa" or with the string "aabaaaaa".
题意:
从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度.
思路:
维护一个中间序列改变k次的头尾指针,显然改变次数越多指针的长度越长,然后每次
扩展右指针,如果右指针涉及到改变就扩展左指针,这么扫两次连续a序列和连续b序列就好了.
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,k;
char a[N];
int solve(char ch,char ch1){
int r=0,l=0,res=0,cnt=0;
for(int i=0; i<n; i++){
if(a[i]!=ch){
if(cnt<k){
r++;
cnt++;
}
else{
while(l<n && a[l]!=ch1)l++;
l++;
r++;
}
}
else r++;
res=max(res, r-l);
}
return res;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin>>n>>k;
cin>>a;
int ans=max(solve('a','b'),solve('b','a'));
cout<<ans<<endl;
return 0;
}