【Leetcode】344. 反转字符串

in #programming19 days ago

1 题目描述

344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

2 解题思路

  1. 双指针技术:使用两个指针 leftright 分别指向数组的开头和结尾。
  2. 交换元素:当 left 小于 right 时,交换 leftright 指向的字符,并将 left 向右移动一位,right 向左移动一位。
  3. 循环直至覆盖整个数组:当 left 大于等于 right 时,说明已经完成反转。

3 Java 代码实现

public class Solution {
    public void reverseString(char[] s) {
        // 初始化左右指针
        int left = 0;
        int right = s.length - 1;

        // 当左指针小于右指针时
        while (left < right) {
            // 交换两个指针指向的字符
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;

            // 更新指针位置
            left++;
            right--;
        }
    }
}
  • 时间复杂度: O(n),我们需要遍历数组来进行元素的交换。
  • 空间复杂度: O(1),只需使用了有限的几个额外变量来进行中间操作。

4 注意事项

  • 双指针技术:利用一个左指针 left 和一个右指针 right 来进行交换。
  • 原地修改:由于题目要求原地修改输入数组,所以我们在交换字符时不使用额外的数据结构。
  • 终止条件:当左指针 left 大于等于右指针 right 时,说明已经完成了字符串的反转。