双指针题解——反转字符串【LeetCode】

344. 反转字符串

一、算法逻辑(逐步通顺讲解每一步思路)

该题要求将字符数组 s 原地反转,即不能使用额外数组,直接在输入数组上进行修改。

✅ 1️⃣ 初始化双指针

  • 指针 left 指向起始位置(索引 0);

  • 指针 right 指向末尾位置(索引 len(s) - 1);


✅ 2️⃣ 使用双指针交换字符

  • 每次将 s[left]s[right] 对换;

  • 然后将 left 向右移动一位,right 向左移动一位;

  • 重复此过程,直到两个指针相遇或交叉(即 left >= right)为止。


✅ 3️⃣ 原地完成反转

通过这样的成对交换,最终整个数组 s 会变成它的反转形式。不借助额外空间,修改直接发生在原数组中。

注意虽然你写了 return s,但实际上题目要求原地修改即可,不需要返回值


二、核心点总结

该算法的核心是:

使用双指针从两端向中间逐步交换字符,实现原地反转。

  • ✅ 原地操作,空间效率高;

  • ✅ 每次只交换两个字符,简单直接;

  • ✅ 适用于字符串、数组等序列类型的反转模板

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """

        left = 0 
        right = len(s) -1 
        while left 

三、时间复杂度分析

  • 每次交换两个字符,共执行 n/2 次交换(n = len(s));

时间复杂度:O(n)


四、空间复杂度分析

  • 只使用了常数级别的指针变量 leftright

  • 没有使用额外空间存储副本或辅助结构;

空间复杂度:O(1)


✅ 总结一句话

本算法通过双指针原地交换的方式,在 O(n) 时间、O(1) 空间内高效完成字符串反转,是序列处理中最经典、通用的技巧之一。

你可能感兴趣的:(我的学习记录,双指针篇_刷题笔记,开发语言,数据结构,算法,leetcode,python)