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子串.
维护一个中间序列相等的头尾指针,显然改变次数越多指针的长度越长,然后每次
扩展右指针,如果右指针涉及到改变就扩展左指针,这么扫两次连续a序列和连续b
序列就好了.
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <map>
using namespace std;
#define maxn 111111
int n, k;
char a[maxn], b[maxn];
int main () {
cin >> n >> k;
cin >> a;
for (int i = 0; i < n; i++) b[i] = a[i];
int ans = 0;
int l = 0, r = 0, cnt = 0;
for (int i = 0; i < n; i++) {
if (a[i] != 'a') {
if (cnt < k) {
r++;
cnt++;
}
else {
while (l < n && a[l] != 'b') l++;
l++;
r++;
}
}
else r++;
ans = max (ans, r-l);
}
l = 0, r = 0, cnt = 0;
for (int i = 0; i < n; i++) {
if (a[i] != 'b') {
if (cnt < k) {
r++;
cnt++;
}
else {
while (l < n && a[l] != 'a') l++;
l++;
r++;
}
}
else r++;
ans = max (ans, r-l);
}
cout << ans << "\n";
return 0;
}