1768.交替合并字符串

难度:🟢 简单

标签字符串双指针

链接1768. 交替合并字符串

题目描述

给你两个字符串 word1word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

返回 合并后的字符串

示例 1:

输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1:  a   b   c
word2:    p   q   r
合并后:  a p b q c r

示例 2:

输入:word1 = "ab", word2 = "pqrs"
输出:"apbqrs"
解释:注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。
word1:  a   b 
word2:    p   q   r   s
合并后:  a p b q   r   s

示例 3:

输入:word1 = "abcd", word2 = "pq"
输出:"apbqcd"
解释:注意,word1 比 word2 长,"cd" 需要追加到合并后字符串的末尾。
word1:  a   b   c   d
word2:    p   q 
合并后:  a p b q c   d

解题思路

核心思想

本题的核心是按照“一前一后”的交替顺序合并两个字符串的字符,直到其中一个字符串被完全取完,然后将另一个字符串的剩余部分直接追加到末尾。

思路选择

双指针法 是解决此问题最直观、最高效的思路。

  • 我们使用两个指针 p1p2,分别指向 word1word2 的当前待处理字符。

  • 在一个循环中,只要两个指针中还有一个在有效范围内,我们就继续合并。

  • 在循环内部,我们先检查 p1 是否有效,如果有效,就追加 word1[p1] 并移动 p1。然后用同样的方式处理 p2

  • 当一个指针越界后,后续的循环只会处理另一个未越界的指针,自然地实现了将剩余部分追加到末尾的效果。

关键步骤

  1. 初始化:初始化两个指针 p1 = 0, p2 = 0,以及一个结果数组 result(使用数组比字符串直接拼接效率更高)。

  2. 循环条件:当 p1 小于 word1 的长度 p2 小于 word2 的长度时,持续循环。

  3. 交替追加: a. 如果 p1 未越界,将 word1[p1] 推入 result 数组,然后 p1++。 b. 如果 p2 未越界,将 word2[p2] 推入 result 数组,然后 p2++

  4. 返回结果:循环结束后,将 result 数组中的所有字符连接成一个字符串并返回。

代码实现

/**
 * @param {string} word1
 * @param {string} word2
 * @return {string}
 */
var mergeAlternately = function(word1, word2) {
    const result = [];
    let p1 = 0, p2 = 0;

    // 只要还有一个指针在界内,就继续
    while (p1 < word1.length || p2 < word2.length) {
        // 如果 word1 还有字符,添加它
        if (p1 < word1.length) {
            result.push(word1[p1]);
            p1++;
        }
        // 如果 word2 还有字符,添加它
        if (p2 < word2.length) {
            result.push(word2[p2]);
            p2++;
        }
    }

    return result.join('');
};

复杂度分析

  • 时间复杂度O(m + n) 其中 m 和 n 分别是两个输入字符串的长度。我们需要完整地遍历两个字符串。

  • 空间复杂度O(m + n) 我们需要一个额外的空间来存储合并后的结果字符串。

相关题目

总结

本题是双指针思想的入门级应用。通过为每个输入源维护一个独立的指针,并在一个统一的循环中处理它们,可以非常清晰、高效地解决合并或比较类的问题。

Copyright © Jun 2025 all right reserved,powered by Gitbook该文件修订时间: 2025-07-03 17:35:08

results matching ""

    No results matching ""

    results matching ""

      No results matching ""