题解 | #编程题2#
编程题2
http://www.nowcoder.com/questionTerminal/92f0169fc9494c7987ab7aca48368698
双指针就行。
考虑把b变成a
让 i j 之间的自b的个数保持在小于等于k.求出最大程度
考虑把a变成b
让 i j 之间的自a的个数保持在小于等于k.求出最大程度
取最大值输出
using namespace std;
string s;
int n;
int res1;
int res2;
int k;
int main(){
cin >> n >> k;
cin >> s;
int cntb = 0;
int cnta = 0;
for(int i = 0, j = 0; i < s.size(); i++){//b变a
if(s[i]== 'b'){//i每次右移一位
cntb++;//更新b的个数
}
while(cntb > k){//b的个数大于k,则j一直右移
if(s[j] == 'b')//更新b的个数
cntb--;
j++;
}
res1 = max(res1, i - j + 1);//计算长度
}
for(int i = 0, j = 0; i < s.size(); i++){//a变b
if(s[i]== 'a'){
cnta++;
}
while(cnta > k){
if(s[j] == 'a')
cnta--;
j++;
}
res2 = max(res2, i - j + 1);
}
res1 = max(res1, res2);
cout << res1 << endl;
return 0;
}