一、题目信息
打卡天数:第十五天题目:344. 反转字符串题目链接:https://leetcode.cn/problems/reverse-string/视频讲解:https://www.bilibili.com/video/BV1fV4y17748
二、题意理解
给定一个字符数组s,需要原地反转数组内容,不能开辟额外数组空间,直接修改原数组,无需返回值。
要求:
- 原地修改,O (1) 额外空间;
- 不能借助额外字符串或数组;
- 熟练掌握字符串反转底层逻辑,区分手写实现与库函数调用。
三、解题思路
本题是字符串入门经典题,核心考察双指针交换。
- 定义左指针从头部开始,右指针从尾部开始;
- 左右指针指向的字符两两交换;
- 左指针右移,右指针左移;
- 直到两个指针相遇,反转完成。
同时通过这道题,可以理清刷题中库函数的使用原则:
- 日常刷题、比赛、快速解题:可以直接使用系统
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. 字符串操作特点
字符串本质就是字符数组,数组的双指针、原地修改、遍历逻辑,完全可以复用在字符串题目中。
六、学习总结
今天开始进入字符串模块的学习,反转字符串作为第一道入门题,难度不高,但意义很大。不仅掌握了字符数组原地反转的双指针写法,也明确了后续刷题的编码规范。
之前一直在练习链表、数组、哈希表相关题型,现在过渡到字符串,知识点衔接顺畅。字符串是算法高频考点,后续很多复杂题目,都会基于字符交换、遍历、反转、截取等基础操作展开。
通过本题也明白,刷题不能只追求结果正确,还要区分场景:会用库函数快速解题,也能脱离工具,手写底层逻辑,才能真正夯实基础,应对不同考试和面试场景。
接下来会继续练习字符串经典题型,积累字符串常用操作技巧,保持每日刷题节奏,稳步提升编码与算法思维。