题目描述:(相关标签:双指针、字符串)
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回合并后的字符串 。示例 1:
输入:word1 = “abc”, word2 = “pqr”
输出:“apbqcr”
解释:字符串合并情况如下所示:
word1: a b c
word2: p q r
合并后: a p b q c r
解题思路:
- 初始化指针:使用两个指针分别指向两个字符串的当前字符位置。
- 交替取字符:交替从两个字符串中取字符,并将其添加到结果字符串中。
- 处理剩余字符:如果一个字符串比另一个长,继续将较长字符串中的剩余字符添加到结果中。
- 返回结果:最终返回合并后的字符串。
具体步骤:
- 初始化结果数组:使用一个数组 result 来存储交替合并的字符。
- 计算长度:获取两个字符串的长度,并计算最小长度。
- 交替合并:通过循环遍历最小长度,依次从 word1 和 word2 中取字符并添加到 result 中
- 处理剩余字符:使用 slice 方法将剩余的字符添加到结果中。
- 返回结果:使用 join 方法将数组转换为字符串并返回。
代码实现:
/**
* @param {string} word1
* @param {string} word2
* @return {string}
*/
function mergeAlternately(word1, word2) {
// 1. 初始化结果数组
let result = [];
// 2. 获取两个字符串的长度, 并计算最小长度
let len1 = word1.length;
let len2 = word2.length;
let minLen = Math.min(len1, len2);
// 3. 通过循环遍历最小长度,交替添加字符到结果数组中
for (let i = 0; i < minLen; i++) {
result.push(word1[i]);
result.push(word2[i]);
}
// 5. 处理剩余的字符
if (len1 > minLen) {
result.push(word1.slice(minLen));
}
if (len2 > minLen) {
result.push(word2.slice(minLen));
}
// 6. 将结果数组转换为字符串并返回
return result.join('');
}
// 示例用法
console.log(mergeAlternately("abc", "pqr")); // 输出 "apbqcr"
console.log(mergeAlternately("ab", "pqrs")); // 输出 "apbqrs"
console.log(mergeAlternately("abcd", "pq")); // 输出 "apbqcd"