LeetCode 344. 反转字符串 | Python

    科技2025-12-02  13

    344. 反转字符串


    题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/reverse-string

    题目


    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

    不要给另外的数组分配额外的空间,你必须 原地 修改输入数组、使用 O(1) 的额外空间解决这一问题。

    你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

    示例 1:

    输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]

    示例 2:

    输入:["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]

    解题思路


    思路:双指针

    如若单纯为了达到 反转字符串 的目的,对于 Python 而言,这道题直接调用内置函数 reverse() 就能够得到结果,但这并不是此题的本意。

    先看看本题中的要求及限制。

    要求:

    编写函数,将输入的字符串反转过来。其中给定的字符串以字符数组的形式给出。

    限制:

    不能分配额外的空间,使用 O ( 1 ) O(1) O(1) 的空间,原地修改输入数组。

    在这里,我们可以使用双指针的方法。两个指针中其中一个从左往右遍历,另外一个从右往左遍历,遍历的同时交换字符。

    具体的做法如下:

    定义双指针 left、right。left 指向数组头部,right 指向数组尾部;交换字符,同时将 left 往右移动一个位置,将 right 往左移动一个位置;重复第二个步骤,直至 left、right 指针重合。

    这里额外提下,在第二个步骤中,如若非严格需要交换,即是当遇到 left、right 指针指向的元素相同时,不进行交换只移动指针。

    不过,下面的代码,严格按照位置交换。

    class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ # 定义指针 left = 0 right = len(s) - 1 # left、right 指针重合前,遍历数组,交换字符 while left < right: # 交换字符 s[left], s[right] = s[right], s[left] # 移动指针 left += 1 right -= 1
    复杂度分析
    时间复杂度: O ( n ) O(n) O(n),其中 n n n 为字符数组的长度。其中交换了 n / 2 n/2 n/2 次。空间复杂度: O ( 1 ) O(1) O(1)。只使用了常数空间。

    欢迎关注


    公众号 【书所集录】


    如有错误,烦请指出,欢迎指点交流

    Processed: 0.016, SQL: 9