跳至主要內容

0344. 反转字符串

ITCharge小于 1 分钟

0344. 反转字符串open in new window

  • 标签:双指针、字符串
  • 难度:简单

题目链接

题目大意

描述:给定一个字符数组 ss

要求:将其反转。

说明

  • 不能使用额外的数组空间,必须原地修改输入数组、使用 O(1)O(1) 的额外空间解决问题。
  • 1s.length1051 \le s.length \le 10^5
  • s[i]s[i] 都是 ASCII 码表中的可打印字符。

示例

  • 示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
  • 示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

解题思路

思路 1:对撞指针

  1. 使用两个指针 leftleftrightrightleftleft 指向字符数组开始位置,rightright 指向字符数组结束位置。
  2. 交换 s[left]s[left]s[right]s[right],将 leftleft 右移、rightright 左移。
  3. 如果遇到 left==rightleft == right,跳出循环。

思路 1:代码

class Solution:
    def reverseString(self, s: List[str]) -> None:
        left, right = 0, len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1

思路 1:复杂度分析

  • 时间复杂度O(n)O(n)
  • 空间复杂度O(1)O(1)