为了账号安全,请及时绑定邮箱和手机立即绑定

功能保持超时

功能保持超时

达令说 2023-01-06 10:37:32

这就是问题:


完成函数 splitPairs,将输入字符串拆分为字符对。如果输入字符串的长度为奇数,则应将最后一对中缺失的第二个字符替换为下划线 _。请注意,一个空字符串应该使您的函数产生一个空数组。


这是我的代码(它一直超时):


function splitPairs(input) {

  let inputArray = input.split('');

  let result = [];

      

  if (inputArray.length % 2 !== 0) {

    for (let i = 0; i < inputArray.length; i + 2) {

      let pair = inputArray[i] + inputArray[i+1];

      //push that onto the result array

      result.push(pair);

    }

    result.push(inputArray[inputArray.length - 1] + '_');      

  } else {

    for (let i = 0; i < inputArray.length; i + 2) {

      let pair = inputArray[i] + inputArray[i+1];

      result.push(pair);

    }

  }

  return result;

}

我做错了什么,解决这个问题的正确方法是什么?如果我可以自己编写解决方案会更好但是我可以使用帮助来了解我应该使用什么方法来解决它


查看完整描述

4 回答

?
梦里花落0921

TA贡献1545条经验 获得超5个赞

超时是因为您没有递增ii + 2计算新值但不将其分配到任何地方。你可以i通过做i += 2which 的简写来更新i = i + 2



查看完整回答
反对 回复 2023-01-06
?
白衣非少年

TA贡献913条经验 获得超0个赞

您需要使用i+=2. 此外,解决方案中存在一些错误:


function splitPairs(input) {

  let inputArray = input.split('');

  let result = [];

  if(!inputArray)

    return result;

  if (inputArray.length % 2 !== 0) {

    for (let i = 0; i < inputArray.length-1; i+=2) {

      let pair = inputArray[i] + inputArray[i+1];

      result.push(pair);

    }

    result.push(inputArray[inputArray.length - 1] + '_');    

  } else {

    for (let i = 0; i < inputArray.length; i += 2) {

      let pair = inputArray[i] + inputArray[i+1];

      result.push(pair);

    }

  }

  return result;

}


console.log(splitPairs(""));


console.log(splitPairs("abcd"));


console.log(splitPairs("abcde"));


评论中提到的一个更简单的解决方案(一个循环)是:


function splitPairs(input) {

  let inputArray = input.split('');

  let result = [];

  if(!inputArray)

    return result;

  let odd = (inputArray.length % 2 !== 0);

  let len = (odd) ? inputArray.length-1 : inputArray.length;

  for (let i = 0; i < len; i+=2) {

    let pair = inputArray[i] + inputArray[i+1];

    result.push(pair);

  }

  if(odd)

    result.push(inputArray[inputArray.length - 1] + '_');    

  return result;

}


console.log(splitPairs(""));


console.log(splitPairs("abcd"));


console.log(splitPairs("abcde"));


查看完整回答
反对 回复 2023-01-06
?
至尊宝的传说

TA贡献1518条经验 获得超10个赞

您可以使用一个(两个)衬垫

var result=str.split(/(..)/).filter(v=>v)
if (result[result.length-1].length==1) result[result.length-1]+="_"


查看完整回答
反对 回复 2023-01-06
?
德玛西亚99

TA贡献1511条经验 获得超3个赞

你可以这样做


function splitPairs(input) {

  return input.split('').map((c, i) => {

    if (i % 2 !== 0) return;

    if (input[i+1]) {

      return input[i] + input[i+1];

    }    


    return input[i] + '_';

  }).filter(pair => pair);

}


查看完整回答
反对 回复 2023-01-06
  • 4 回答
  • 0 关注
  • 12 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信