题解 | #编程题2#

编程题2

http://www.nowcoder.com/practice/dcc301bc11a7420b88afdbd272299809

const arr = readline().split(" ");
const inputStr = readline();
const n = parseInt(arr[0]);
const m = parseInt(arr[1]);
//将a|b所在坐标记录为a,b两个数组,此处我为了自己看着方便是以1开始的
let arrA = [],arrB = [];
let resultLen = 0;
for(let i = 0;i < inputStr.length;i++){
    if(inputStr[i] == "a"){
        arrA.push(i + 1);
    }else{
        arrB.push(i + 1);
    }
}
const lenA = arrA.length,lenB = arrB.length;
if(lenA <= m || lenB <= m){//a或b的数目小与等于操作次数,肯定是总长度了
    resultLen = n;
}
// a,b 都超过 m 时,如果将a 换成 b,从第i个a 开始换,那么 长度为 arrA[i-1] 到 arrA[i + m]的差值 -1
// 边界情况  m + 1 = arrA.length,最长的话就是n - arrA[0] 或者 arrA[m] - 1 
let resultA = getResult(n,m,arrA),resultB = getResult(n,m,arrB);
resultA > resultB ? print(resultA) : print(resultB);


function getResult(n,m,arr){
    if(m + 1 == arr.length){
        return n - arr[0] > arr[m] - 1 ? n - arr[0] : arr[m] - 1;
    }
    let result = 0;
    for(let i = 1;i <= arr.length - m;i++){
                //比较一下每次的值省的以后再去比对,其实可以增加一个参数arrB,直接来计算更新result,但是刚开始为了写完,没注意这些,应该会更节约一些吧
        result = arr[i + m] - arr[i - 1] - 1 > result ? arr[i + m] - arr[i - 1] - 1 : result;
    }
    return result;
}

全部评论

相关推荐

03-04 07:14
门头沟学院 C++
后测速成辅导一两个月...:老板:都给工作机会了还想要工资,哪来这么多好事
点赞 评论 收藏
分享
02-28 01:18
已编辑
南昌大学 后端工程师
后测速成辅导一两个月...:把开源经历放个人项目上边应该更好,就像大部分人都把实习经历放个人项目上边
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务