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

1768. 交替合并字符串 详细题解

题目名称:1768. 交替合并字符串题目来源:LeetCode / 力扣题目难度:简单题目链接:https://leetcode.cn/problems/merge-strings-alternately/


一、暴力解法(最容易想到的方法)

  1. 思路说明采用单指针遍历的直观思路:用一个索引变量从头开始遍历,先取第一个字符串的字符,再取第二个字符串的字符,交替追加到结果中;当索引超出其中一个字符串的长度后,继续把另一个字符串剩余的字符全部追加到结果末尾。

  2. 时间复杂度word1长度为nword2长度为m,需要遍历所有字符各一次,时间复杂度为O(n + m)

  3. 空间复杂度需要创建一个新字符串存储最终结果,长度为n+m,额外空间复杂度为O(n + m)(这是存储结果的必要空间,无法省略)。

  4. 适用场景适合所有场景,逻辑直白、代码易写,新手入门首选,本题暴力法已经足够高效

  5. C++ 代码实现

cpp

运行

#include <string> using namespace std; class Solution { public: string mergeAlternately(string word1, string word2) { string res; // 存储最终结果 int i = 0; // 单指针 int len1 = word1.size(); int len2 = word2.size(); // 交替取字符,直到其中一个字符串遍历完 while (i < len1 && i < len2) { res += word1[i]; res += word2[i]; i++; } // 追加 word1 剩余字符 while (i < len1) { res += word1[i]; i++; } // 追加 word2 剩余字符 while (i < len2) { res += word2[i]; i++; } return res; } };

二、优化解法(时间 / 空间复杂度最优的方法)

  1. 思路演进
  • 暴力法的冗余:用了 3 个循环,代码稍显冗余;
  • 改进方向:用双指针替代单指针,一个循环搞定所有逻辑,代码更简洁,效率完全一致;
  • 本题特性:必须遍历所有字符、必须存储结果,没有可优化的计算冗余,因此最优解法仅优化代码结构,不改变复杂度。
  1. 核心思想双指针分别遍历两个字符串,交替追加字符,任一字符串遍历完后,直接拼接另一个字符串的剩余部分。

  2. 算法步骤① 定义双指针i=0(遍历 word1)、j=0(遍历 word2),定义结果字符串;② 循环:只要i没遍历完word1j没遍历完word2;③ 如果i未越界,追加word1[i]i++;④ 如果j未越界,追加word2[j]j++;④ 循环结束,返回结果。

  3. 时间复杂度依旧是O(n + m),和暴力法一致,是理论最优时间复杂度(必须访问所有字符)。

  4. 空间复杂度依旧是O(n + m),存储结果的必要空间,无法再优化(因为题目要求返回新字符串,必须开辟空间)。

  5. C++ 代码实现(关键注释)

cpp

运行

#include <string> using namespace std; class Solution { public: string mergeAlternately(string word1, string word2) { string res; int i = 0, j = 0; // 双指针:i遍历word1,j遍历word2 int len1 = word1.size(), len2 = word2.size(); // 一个循环完成交替拼接 + 剩余字符追加 while (i < len1 || j < len2) { // 先添加word1的当前字符(如果有) if (i < len1) { res += word1[i++]; } // 再添加word2的当前字符(如果有) if (j < len2) { res += word2[j++]; } } return res; } };

三、两种解法对比总结

解法时间复杂度空间复杂度优点缺点
暴力法O(n+m)O(n+m)思路极度直观,易理解循环数量多,代码冗余
最优解法O(n+m)O(n+m)代码简洁,一个循环搞定无明显缺点(完美)

四、进一步思考(可选)

  1. 是否存在时间 O (n) 且空间 O (1) 的解法?不存在。
    • 时间必须遍历所有字符,复杂度为O(n+m)
    • 题目要求返回新的合并字符串,必须开辟空间存储结果,空间无法做到 O (1)
  2. 如果输入数据规模扩大 10 倍,哪种解法会先失效?两种解法复杂度完全一致,都不会失效,效率相同。
  3. 类似题目推荐
    • 88. 合并两个有序数组
      1. 最长公共前缀
      1. 反转字符串中的单词 III

五、调试与验证

1. 手动模拟示例(示例 1:word1="abc", word2="pqr")
  • i=0, j=0:添加ap→ res="ap"
  • i=1, j=1:添加bq→ res="apbq"
  • i=2, j=2:添加cr→ res="apbqcr"
  • 遍历完成,返回结果。
2. 边界测试用例
  • 空字符串:word1="", word2="abc"→ 输出"abc"
  • 单字符:word1="a", word2="b" → 输出 "ab"
  • 一长一短:word1="abcd", word2="pq" → 输出 "apbqcd"
http://www.jsqmd.com/news/599816/

相关文章:

  • SEO整站优化服务需要哪些专业技能_SEO整站优化服务如何提高网站的技术优化
  • RAGFlow Agent 搞定火电复杂图表
  • OpenClaw+千问3.5-35B-A3B-FP8:教育行业习题生成与解析
  • PID控制算法原理与应用详解
  • 44、QImage---------绘图
  • 即时通信|自定义基于 Netty 的二进制协议(应用层协议)+心跳检测
  • 模拟函数memmove
  • SEO 排名优化软件如何进行竞争对手分析
  • Java 集合框架全景图:一篇文章带你认识所有集合类
  • GraphRAG硬核实战:打造企业“数字老师傅”
  • Android studio新版本无法在ai对话框使用中文输入法候选框
  • React 自定义 Hook 的命名规范与调用规则详解
  • XBusServo嵌入式舵机控制库:X-Bus协议驱动与实时闭环实践
  • 2026四川西北隔断厂家top推荐:pvc隔断/不锈钢隔断/公共卫生间隔断/医院卫生间隔断/卫生间隔断批发/选择指南 - 优质品牌商家
  • Win11安装Claude-Code出现报错问题解决
  • 基于STM32的简易示波器设计与实现
  • 2026交流充电桩优质厂家推荐指南:四川充电桩升级改造/四川充电桩维修/四川充电桩运维/四川充电设备厂家/选择指南 - 优质品牌商家
  • 从MATLAB到Python:我如何把那个课程大作业的OCR算法“移植”并优化了一遍
  • 配置嵌入式Linux系统从NFS启动
  • 基于STM32微控制器的频率计设计与实现
  • STM32外设驱动库解析与实战应用
  • 设计服务公司可能最适合跑AI工作流
  • OpenClaw环境隔离:Qwen3-4B模型与技能的沙盒运行配置
  • OpenClaw效率对比测试:Qwen3-14b_int4_awq在不同量化精度下的表现
  • OpenClaw跨平台控制方案:千问3.5-9B同步操作多台设备
  • 利用json-to-ts工具进行转换,放置在typeScript.ts文件中
  • 网络通信三表解析:ARP、MAC与路由表实战指南
  • 30B 脉冲分裂手术报告
  • SEO_从零开始构建可持续的SEO优化体系(468 )
  • CSS如何实现背景颜色的棋盘格分布_利用repeating-gradient