Skip to content

344. 反转字符串 Easy

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

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

示例 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"]

解题思路

输入:一个字符列表 s,表示原始字符串,需原地反转

输出:将字符顺序反转,直接修改输入列表 s,不返回新值

本题是典型的 相向双指针 问题。

我们可以定义两个指针:left = 0right = len(s) - 1,分别指向字符串的开头和结尾。

然后进行如下操作:

  • left < right 时,不断交换 s[left]s[right]
  • 每次交换后,将 left 向右移一位,right 向左移一位;
  • 当两个指针相遇或交错时,说明已经完成整个字符串的反转。

代码实现

python
class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        left, right = 0, len(s) - 1

        # 当左指针小于右指针时,交换左右字符
        while left < right:
            # 使用 Python 的交换语法,省略临时变量
            s[left], s[right] = s[right], s[left]

            # 移动指针向中间靠拢
            left += 1
            right -= 1
javascript
/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
const reverseString = function(s) {
    let left = 0;
    let right = s.length - 1;

    while (left < right) {
        const temp = s[left];

        s[left] = s[right];
        s[right] = temp;

        left ++;
        right --;
    }
};

复杂度分析

时间复杂度:O(n)

空间复杂度:O(1)

链接

344 国际版

344 中文版