JavaScript中的算法合并两个字符串

时间:2017-11-30 17:41:51

标签: javascript string algorithm

希望学习更好的方法来解决这个算法。输入包含两个字符串。

输入 - 示例1:

var a = 'abc'
var b = 'def'

预期产出

mergedString = 'adbecf';

我的解决方案:

var a = 'abc';
var b = 'efg';

function mergeStr(a, b) {
  var aArr = a.split('');
  var bArr = b.split('');
  var newStr = '';

  for (var i = 0; i < aArr.length; i++) {
    newStr += aArr[i] + bArr[i];
  }
}

mergeStr(a, b);

该解决方案适用于上面的输入示例。但是当第二个输入值给我时,我被卡住了:

var a = 'ab';
var b = 'efg'; 

预期输出为:

aebfg
自从我被定时以来,我想出了以下垃圾。我刚刚添加了一个if语句来处理我给出的确切用例。显然这个解决方案是垃圾。我真的很想看看其他人会做些什么。

function mergeStr(a, b) {
  var aArr = a.split('');
  var bArr = b.split('');
  var newStr = '';

  for (var i = 0; i < aArr.length; i++) {
    newStr += aArr[i] + bArr[i];
  }

  if (a.length < b.length) {
    newStr += b[2];
  }

  console.log(newStr);
}

4 个答案:

答案 0 :(得分:3)

与其他(当前)答案形成鲜明对比的替代方案。

function mergeStr( str1, str2 ) {
  let merged = "";
  const min = Math.min( str1.length, str2.length );

  // first part: take from both strings
  for( let i=0; i<min; i++ ) {
    merged += str1[i] + str2[i];
  }

  // second part: take the rest from either string
  let largerStr= str1.length > str2.length ? str1 : str2;
  merged += largerStr.substr( min );

  return merged;
}

这需要较短的长度,并且基本上将您的方法用于前几个字符。之后,它只是附加较大字符串的其余部分。

答案 1 :(得分:1)

您可以像数组一样访问每个字符串字符,您不需要使用拆分它们来执行此操作。

我的解决方案使用三元运算符:

function merge( str1, str2 ) {
    let merged = "";
    let max = str1.length > str2.length ? str1.length : str2.length;
    for ( let i = 0; i < max; i++ ) {
        merged += ( str1[i] ? str1[i] : "" ) + ( str2[i] ? str2[i] : "" );
    }
    return merged;
}

// prints acbd
console.log( merge( "ab", "cd") );

// str1 is bigger, prints acbdx
console.log( merge( "abx", "cd") );

// str1 is bigger, prints acbdxy
console.log( merge( "abxy", "cd") );

// str2 is bigger, prints acbdx
console.log( merge( "ab", "cdx") );

// str2 is bigger, prints acbdxy
console.log( merge( "ab", "cdxy") );

答案 2 :(得分:1)

我喜欢一个衬垫..

function algo(str1,str2) {
    return Array.from(str1.length >= str2.length ? str1 : str2).map( (v,i) => (str1[i]||"")+(str2[i]||"") ).join("")
}

答案 3 :(得分:0)

如何找到最大长度变量,然后循环遍历它以及undefined是否回退到空字符串。

&#13;
&#13;
var a = 'ab';
var b = 'efg';

function mergeStr(a, b) {
  let newStr = '';
  let len = Math.max(a.length - 1, b.length - 1);
  for (let i = 0; i <= len; i++) {
    newStr += (a[i] || "") + (b[i] || "");
  }
  return newStr;
}

console.log(mergeStr(a, b));
&#13;
&#13;
&#13;