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?
Input4 2 abba
Output
4
Input
8 1 aabaabaa
Output
5
题目链接:http://codeforces.com/problemset/problem/676/C
题目大意: 给一个字符串由‘a', 'b'组成,给两个数字,一个数字是字符串的长度n,另一个是一个数字k,可以改变多少次字母(每次改一个), 改的目的是为了使字符串的相同字母组成的字串是多少。如aabaabaa, 改变一次,改变第一个b得到字符串aaaaabaa,连续相同字母组成的字串为5, 改变第二个为aabaaaaa也是5,于是输出5.
注意:不仅可以改变b, 还可以改变a。
ac代码:
#include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<iostream> #include<cstdlib> #include<string> using namespace std; const int MaxN = 1e5 + 7; char a[MaxN]; int b[MaxN], c[MaxN]; int n, k, p = 0, q = 0; int main() { int ans1 = 0, ans2 = 0, ans = 0; //ans1 为改变b的最长长度 , ans2为改变a的, ans为max(ans1, ans2) cin >> n >> k; for(int i = 0; i < n; i++) { cin >> a[i]; if(a[i] == 'a') b[++p] = i; // p为有多少个a,每个a的位置在什么地方 else c[++q] = i; //q为有多少个b,b在什么地方 } if(k >= p || k >= q) printf("%d ", n); else { ans1 = b[k + 1]; for(int i = 1; k + i < p; i++) ans1 = max(ans1, b[k + i + 1] - b[i] - 1); ans1 = max(ans1, n - b[p - k] - 1); //最后一段需要用总长度判断 ans2 = c[k + 1]; for(int i = 1; k + i < q; i++) ans2 = max(ans2, c[k + i + 1] - c[i] - 1); ans2 = max(ans2, n - c[q - k] - 1); ans = max(ans1, ans2); printf("%d ",ans); } }