【Leetcode】344. 反转字符串

in programming •  2 months 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 时,说明已经完成了字符串的反转。
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!