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

相关推荐

牛客533433175号:更可气的是我做完这些给我拒了
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务