1768. 交替合并字符串

没问题!咱们完全不搞复杂的名词,把这道题当成“排队接力”的游戏来理解。 你可以把 word1 看作队A,把 word2 看作队B。 题目要求:队A出一个人,队B出一个人,交替排进新队伍里。 第一步:图解核心逻辑(以 word1 = "abc",

没问题!咱们完全不搞复杂的名词,把这道题当成“排队接力”的游戏来理解。


你可以把 word1 看作队A,把 word2 看作队B

题目要求:队A出一个人,队B出一个人,交替排进新队伍里。


第一步:图解核心逻辑(以 word1 = "abc", word2 = "pqr" 为例)

我们需要两个“指针”(可以想象成指着队员的手指):


  • 手指 i 指着队A(word1)当前轮到谁。

  • 手指 j 指着队B(word2)当前轮到谁。

一开始,两个手指都指着第 0 个位置:


轮次

动作

两个队伍的状态

新队伍 res

初始

指针i=0i=0,j=0j=0

word1[0]'a'word2[0]'p'

[]

第 1 步

队A出 'a',手指ii 往后移

指针变为i=1i=1,j=0j=0

['a']

第 2 步

队B出 'p',手指jj 往后移

指针变为i=1i=1,j=1j=1

['a', 'p']

第 3 步

队A出 'b',手指ii 往后移

指针变为i=2i=2,j=1j=1

['a', 'p', 'b']

第 4 步

队B出 'q',手指jj 往后移

指针变为i=2i=2,j=2j=2

['a', 'p', 'b', 'q']

...

依此类推

...

['a', 'p', 'b', 'q', 'c', 'r']

第二步:带防呆设计的代码拆解

我们再来看看完整代码,这回每一段我都给你配上“大白话”翻译:


Python

class Solution:
    def mergeAlternately(self, word1: str, word2: str) -> str:
        # 1. 准备一个空盒子 res,专门用来装拼接好的字符
        res = []
        
        # 2. 算一下两个队伍分别有多少人
        m = len(word1)  # 队A的总人数
        n = len(word2)  # 队B的总人数
        
        # 3. 两个手指一开始都指向队伍的最前面(索引 0)
        i = 0
        j = 0
        
        # 4. 【核心循环】只要“队A还有人”并且“队B也还有人”,就继续交替领人
        # i < m 代表队A还没领完;j < n 代表队B也没领完
        while i < m and j < n:
            res.append(word1[i])  # 队A出一个人,装进盒子
            res.append(word2[j])  # 队B出一个人,装进盒子
            
            i = i + 1  # 队A的手指往后挪一位(简写为 i += 1)
            j = j + 1  # 队B的手指往后挪一位(简写为 j += 1)
        
        # 5. 【扫尾工作】当上面的 while 循环结束时,说明至少有一个队伍领完了。
        # 如果某个队伍比较长,剩下的直接整串扔进盒子末尾。
        # 在 Python 里,word1[i:] 的意思就是:从位置 i 开始,一直取到末尾。
        # 如果队A已经领完了(i == m),word1[m:] 就是空的,不会影响结果。
        res.append(word1[i:])
        res.append(word2[j:])
        
        # 6. 把盒子里的字符用 ""(空字符)连成一个完整的字符串返回
        # 例如 ['a', 'p', 'b'] 会变成 "apb"
        return "".join(res)

第三步:初学者最容易卡住的 3 个疑问

疑问 1:为什么用 res = [] 装字符,而不是直接用字符串加(res = "" 然后 res += ...)?

  • 解答:在 Python 中,字符串是不可变的。每次做 字符串 + 字符串,计算机都要在内存里重新盖一座“新房子”,非常浪费时间;而往列表([])里加东西,就像往背包里塞东西一样快。

疑问 2:while i < m and j < n 是什么意思?

  • 解答and 代表“同时成立”。这句话的意思是:“只有在两个队伍都还有人的时候,我才一对一对地拿”。只要有任意一队拿光了,这个循环就立刻停止。

疑问 3:word1[i:] 如果没剩下东西会发生什么?

  • 解答:假设 word1 = "ab"(长度为2),当i=2i=2 时,word1[2:] 取出来的是空字符串 ""。列表加了一个空字符串,最后用 " ".join(...) 拼起来时完全没有影响,非常安全!

GitHub API 2026-08-10