双指针就行。

考虑把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;
}