LeetCode算法题(Go语言实现)_01

题目

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

返回 合并后的字符串 。


一、代码实现

go 复制代码
func mergeAlternately(word1 string, word2 string) string {
    var buffer bytes.Buffer
    i, j := 0, 0
    len1, len2 := len(word1), len(word2)
    
    // 交替添加字符
    for i < len1 && j < len2 {
        buffer.WriteByte(word1[i])
        buffer.WriteByte(word2[j])
        i++
        j++
    }
    
    // 追加剩余部分(直接拼接剩余子串)
    buffer.WriteString(word1[i:])
    buffer.WriteString(word2[j:])
    
    return buffer.String()
}

二、算法分析

  1. 核心思路

• 双指针交替遍历 :用指针 i 和 j 分别遍历 word1 和 word2,交替将字符添加到结果中,直到其中一个字符串遍历完。

• 剩余字符追加:若某字符串未遍历完,直接将其剩余部分追加到结果末尾。

  1. 关键步骤

  2. 初始化缓冲区 :使用 bytes.Buffer 高效拼接字符串(类似 Java 的 StringBuilder)。

  3. 交替合并 :循环中依次添加 word1 和 word2 的字符。

  4. 处理剩余字符 :通过 word1[i:] 和 word2[j:] 直接截取剩余子串追加。

  5. 复杂度

• 时间复杂度 :O(max(m, n)),其中 m 和 n 为两字符串长度。交替合并部分为 O(min(m, n)),剩余部分为 O(|m-n|)。

• 空间复杂度 :O(m + n),存储合并后的字符串。

三、算法图解(SVG)

图解说明:

  1. 双指针 i 和 j 分别从 word1 和 word2 的起始位置开始。
  2. 每次循环依次将 word1[i] 和 word2[j] 添加到结果中。
  3. 遍历完成后,将剩余字符直接拼接。

四、边界条件与测试用例

测试用例 预期输出 说明
word1="ab", word2="pqrs" "apbqrs" word2 较长,剩余字符追加
word1="", word2="xyz" "xyz" word1 为空字符串
word1="a", word2="" "a" word2 为空字符串

五、扩展思考

  1. 多字符串交替合并:若需合并多个字符串(如三个),可通过循环队列管理指针。
  2. 内存优化 :预计算结果长度并预分配内存(如 make([]byte, 0, len1+len2)),减少动态扩容开销。
  3. 并发处理:若字符串极大,可将交替合并和剩余追加拆分为并行任务(需处理竞态条件)。
相关推荐
Ivanqhz17 分钟前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
后台模板学习25 分钟前
Go Web开发中任务调度框架的源码解析与高可用实现方案
开发语言·后端·golang
lpfasd12332 分钟前
推荐算法进化史
算法·机器学习·推荐算法
FungLeo34 分钟前
成为全栈·Go 后端篇·分类树与标签关系:目录变更为何需要协调
golang·go·gorm·数据库事务·分类树·成为全栈
Pniubi43 分钟前
力扣543二叉树的直径(深度优先搜索法(递归))
算法·leetcode·职场和发展
fly-iot1 小时前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang
FungLeo1 小时前
成为全栈·Go 后端篇·文章查询与展示投影:安全分页、排序和软删除
golang·go·gorm·分页查询·成为全栈·sql安全
紧跟先前的步伐10 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
日日大王学编程11 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
UIU11412 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划