LeetCode 344. 反转字符串

题目描述

344. 反转字符串

image-20230306223109730

思路分析

解法一:双指针(推荐)

核心思路

  • 使用左右两个指针分别指向数组的首尾位置。
  • 每次交换左右指针所指元素,然后左指针右移、右指针左移。
  • 当左指针不小于右指针时停止,原地完成反转,无需额外空间。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符数组的长度,每个元素最多被访问一次。
  • 空间复杂度:O(1),原地交换,不使用额外空间。
class Solution {
    public void reverseString(char[] s) {
        int left = 0, right = s.length - 1;
        // 左右指针向中间靠拢,依次交换元素
        while (left < right) {
            char tmp = s[left];
            s[left] = s[right];
            s[right] = tmp;
            left++;
            right--;
        }
    }
}
func reverseString(s []byte) {
    // 左右指针向中间靠拢,依次交换元素
    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
        s[i], s[j] = s[j], s[i]
    }
}

相似题目

题目 难度 考察点
345. 反转字符串中的元音字母 简单 双指针 / 条件反转
541. 反转字符串 II 简单 双指针 / 部分反转
151. 反转字符串中的单词 中等 双指针 / 翻转技巧
557. 反转字符串中的单词 III 简单 双指针 / 逐词反转
189. 轮转数组 中等 双指针 / 三次翻转
125. 验证回文串 简单 双指针 / 字符串
680. 验证回文串 II 简单 双指针 / 字符串
本文作者:
本文链接: https://hgnulb.github.io/blog/2024/38205735
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!