当前位置: 首页 > news >正文

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

题目

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

返回 合并后的字符串 。


一、代码实现

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. 核心思路

双指针交替遍历:用指针 ij 分别遍历 word1word2,交替将字符添加到结果中,直到其中一个字符串遍历完。
剩余字符追加:若某字符串未遍历完,直接将其剩余部分追加到结果末尾。

  1. 关键步骤

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

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

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

  5. 复杂度

时间复杂度O(max(m, n)),其中 mn 为两字符串长度。交替合并部分为 O(min(m, n)),剩余部分为 O(|m-n|)
空间复杂度O(m + n),存储合并后的字符串。

三、算法图解(SVG)

在这里插入图片描述

图解说明

  1. 双指针 ij 分别从 word1word2 的起始位置开始。
  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. 并发处理:若字符串极大,可将交替合并和剩余追加拆分为并行任务(需处理竞态条件)。

相关文章:

  • GR00T N1——英伟达开源的通用人形VLA:类似Helix的快与慢双系统,且可类似ViLLA利用海量的无标注视频做训练
  • Docker和Dify学习笔记
  • c++简单实现redis
  • 使用LLaMA Factory微调导出模型,并用ollama运行,用open webui使用该模型
  • 基于javaweb的SpringBoot成绩管理系统设计与实现(源码+文档+部署讲解)
  • 优化广告投放算法
  • Unity Shader编程】之渲染流程之深度及pass详解
  • Umi-OCR- OCR 文字识别工具,支持截图、批量图片排版解析
  • Oracle 19C reverse反向索引测试
  • 安防监控视频平台EasyNVR级联视频上云系统EasyNVS出现“Login error”报错的原因排查
  • AI对话框实现
  • Workerman5.0如何实现一对一聊天
  • 实体机安装linux视频教程。windows和ubuntu共存。启动时选择切换引导系统。
  • 两个常用的用于读写和操作DXF文件C#库:netDxf 和 DXF.NET
  • Redis命令详解--集合
  • 服务器——报错解决:移动文件时,bash: /usr/bin/mv: Argument list too long
  • [密码学实战]Java实现抗量子Kyber512与Dilithium2算法及详解
  • Facebook 如何影响元宇宙的发展趋势
  • 连接 kafka0.8.1.1 java
  • 使用HAI来打通DeepSeek的任督二脉
  • 上海位居全球40城科技传播能力第六名
  • 纽约市长称墨海军帆船撞桥已致2人死亡,撞桥前船只疑似失去动力
  • 2024年全国博物馆接待观众14.9亿人次
  • 马上评|重病老人取款身亡,如何避免类似悲剧?
  • 秦洪看盘|风格有所转变,热钱回流高弹性品种
  • 受关税政策影响,沃尔玛将上调部分商品在美售价