题目:
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.
解答:
是很明显的尺取法,直接用两个指针或者用队列实现即可
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
#include<string.h>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<cstdio>
#include<string>
using namespace std;
int max(int a, int b) {
return a < b ? b : a;
}
int main() {
int len, k;
cin >> len >> k;
string str;
cin >> str;
int sp, se;
sp = se = 0;
int cnt = 0;
int res = 0;
while (se < len) {
if (str[se] == 'a') {
se++;
}
else {
if (cnt < k) {
se++;
cnt++;
}
else {
res = max(res, se - sp);
while (str[sp] != 'b') {
sp++;
}
sp++;
se++;
}
}
}
res = max(res, se - sp);
sp = se = 0;
cnt = 0;
while (se < len) {
if (str[se] == 'b') {
se++;
}
else {
if (cnt < k) {
se++;
cnt++;
}
else {
res = max(res, se - sp);
while (str[sp] != 'a') {
sp++;
}
sp++;
se++;
}
}
}
res = max(res, se - sp);
cout << res << endl;
//system("pause");
}