希望学习更好的方法来解决这个算法。输入包含两个字符串。
输入 - 示例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);
}
答案 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
是否回退到空字符串。
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;