High school student Vasya got a string of length n as a birthday present. This string consists of letters 'a' and 'b' only. Vasya denotes beauty 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".
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<string> #include<bits/stdc++.h> #define mem0(a) memset(a, 0, sizeof(a)); #define mem1(a) memset(a, -1, sizeof(a)); using namespace std; typedef long long LL; int n, k, sum[100100]; char str[100100]; bool check(int x) { //printf("%d\n", x); for(int i = 0; i+x <= n; i ++) { if(sum[i+x] - sum[i] >= x-k || sum[i+x] - sum[i] <= k) return true; } return false; } int main() { while(~scanf("%d%d", &n, &k)) { scanf("%s", str); int len = strlen(str); sum[0] = 0; for(int i = 0; i < len; i ++) { if(str[i] == 'b') sum[i+1] = sum[i]+1; //前缀和 else sum[i+1] = sum[i]; } int l = 0, r = 100010; while(l+1 < r) { //二分搜索 int mid = (l+r)/2; if(check(mid)) l = mid; else r = mid; } if(check(l+1)) printf("%d\n", l+1); else printf("%d\n", l); } return 0; }