news 2026/4/28 6:12:14

算法打卡第十五天 | LeetCode 344. 反转字符串 字符串基础 + 库函数使用规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法打卡第十五天 | LeetCode 344. 反转字符串 字符串基础 + 库函数使用规范

一、题目信息

打卡天数:第十五天题目:344. 反转字符串题目链接:https://leetcode.cn/problems/reverse-string/视频讲解:https://www.bilibili.com/video/BV1fV4y17748

二、题意理解

给定一个字符数组s,需要原地反转数组内容,不能开辟额外数组空间,直接修改原数组,无需返回值。

要求:

  1. 原地修改,O (1) 额外空间;
  2. 不能借助额外字符串或数组;
  3. 熟练掌握字符串反转底层逻辑,区分手写实现与库函数调用。

三、解题思路

本题是字符串入门经典题,核心考察双指针交换

  1. 定义左指针从头部开始,右指针从尾部开始;
  2. 左右指针指向的字符两两交换;
  3. 左指针右移,右指针左移;
  4. 直到两个指针相遇,反转完成。

同时通过这道题,可以理清刷题中库函数的使用原则

  • 日常刷题、比赛、快速解题:可以直接使用系统reverse库函数,高效简洁;
  • 面试、笔试手撕代码:禁止直接调用库函数,必须手动实现交换逻辑,考察底层原理。

四、两种写法实现

写法一:手动双指针交换(面试必写)

cpp

运行

class Solution { public: void reverseString(vector<char>& s) { int left = 0; int right = s.size() - 1; while(left < right) { swap(s[left], s[right]); left++; right--; } } };

写法二:直接调用库函数(刷题快速写法)

cpp

运行

#include <algorithm> class Solution { public: void reverseString(vector<char>& s) { reverse(s.begin(), s.end()); } };

五、核心知识点总结

1. 双指针思想

左右对撞指针是数组、字符串反转类题目通用解法,逻辑简单、空间最优,时间复杂度 O(n),空间复杂度 O(1)。

2. 库函数使用边界

  • 单纯刷题过题、练习思路:合理使用 STL 库函数,节省时间;
  • 面试场景:面试官重点考察底层实现逻辑,必须手写反转、排序、查找等核心代码,不能依赖库函数。

3. 字符串操作特点

字符串本质就是字符数组,数组的双指针、原地修改、遍历逻辑,完全可以复用在字符串题目中。


六、学习总结

今天开始进入字符串模块的学习,反转字符串作为第一道入门题,难度不高,但意义很大。不仅掌握了字符数组原地反转的双指针写法,也明确了后续刷题的编码规范。

之前一直在练习链表、数组、哈希表相关题型,现在过渡到字符串,知识点衔接顺畅。字符串是算法高频考点,后续很多复杂题目,都会基于字符交换、遍历、反转、截取等基础操作展开。

通过本题也明白,刷题不能只追求结果正确,还要区分场景:会用库函数快速解题,也能脱离工具,手写底层逻辑,才能真正夯实基础,应对不同考试和面试场景。

接下来会继续练习字符串经典题型,积累字符串常用操作技巧,保持每日刷题节奏,稳步提升编码与算法思维。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 6:10:46

华硕笔记本性能优化利器:G-Helper开源控制工具全攻略

华硕笔记本性能优化利器&#xff1a;G-Helper开源控制工具全攻略 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sca…

作者头像 李华
网站建设 2026/4/28 6:10:23

模板工具进阶用法:构建高辨识度自媒体视觉体系的系统方法

自媒体内容竞争进入精细化运营阶段。视觉辨识度已成为账号差异化的核心识别要素。模板工具的价值不仅在于快速出图&#xff0c;更在于构建可复用、可演进的视觉体系。多数创作者停留在基础套用层面&#xff0c;导致内容同质化严重&#xff0c;难以形成稳定的记忆点。真正的进阶…

作者头像 李华
网站建设 2026/4/28 6:09:26

持久内存编程实战:从PMem原理到键值存储应用开发

1. 项目概述与核心价值最近在折腾一个需要处理海量实时数据的项目&#xff0c;数据量一大&#xff0c;传统的内存和磁盘方案就开始捉襟见肘。内存快&#xff0c;但容量小、成本高&#xff0c;而且掉电就丢数据&#xff0c;不敢放太关键的东西&#xff1b;SSD容量大、数据持久&a…

作者头像 李华
网站建设 2026/4/28 6:09:20

多国站点利润分化加剧跨境卖家如何重新排优先级

潮汐变向&#xff1a;全球市场利润分化下的跨境战略重塑深夜的深圳&#xff0c;跨境电商园区依旧灯火通明。张明的团队刚刚结束了一场跨时区会议&#xff0c;屏幕上并列显示着北美、欧洲、东南亚站点的实时数据报表。一个鲜明的对比刺痛了他的眼睛&#xff1a;北美站点虽然销售…

作者头像 李华
网站建设 2026/4/28 6:07:22

Java Optional的优化技巧:提升代码简洁性

在Java编程中,Optional类是处理可能为null的值时不可或缺的工具。它不仅能避免空指针异常,还能使代码更加简洁和可读。本文将通过一个具体的例子,展示如何利用Optional优化代码。 背景介绍 考虑以下接口: public interface Vc {}public interface Vd<P extends Vc,

作者头像 李华