题解 | #编程题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;
}
全部评论

相关推荐

如题如果提出了一个薪资,A不成功,会有可能被取消offer吗
爱打瞌睡的柯基:最想去你们公司 但是别家开的高一些,希望能申请高一点 不管结果如何都谢谢你
点赞 评论 收藏
分享
11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务