贪心算法,按照题目的描述 增加一个修正策略 然后滑动
#include <iostream>
// 滑动窗口 贪心
using namespace std;
int getMax(string &s, int m, char target) {
int left = 0, right = 0;
int result = 0, index = 0;
int n = s.size();
while (right < n) {
if (s[right] == target) {
right++;
} else {
index++;
right++;
// 这里因为用了一次修正所以 right往后移动一次
while (index > m) {
// 超过修正次数了
if(s[left] != target) {
index--;
}
left++;
}
}
result = max(result, right - left);
}
return result;
}
int main() {
int n, m;
string str;
cin >> n >> m;
cin >> str;
if (m >= n) {
cout << n << endl;
} else {
cout << max(getMax(str, m, 'a'), getMax(str, m, 'b')) << endl;
}
return 0;
}