LeetCode 344. 反转字符串
题目描述
思路分析
解法一:双指针(推荐)
核心思路:
- 使用左右两个指针分别指向数组的首尾位置。
- 每次交换左右指针所指元素,然后左指针右移、右指针左移。
- 当左指针不小于右指针时停止,原地完成反转,无需额外空间。
复杂度分析:
- 时间复杂度: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 | 简单 | 双指针 / 字符串 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
