1 题目描述
344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
2 解题思路
- 双指针技术:使用两个指针
left
和right
分别指向数组的开头和结尾。 - 交换元素:当
left
小于right
时,交换left
和right
指向的字符,并将left
向右移动一位,right
向左移动一位。 - 循环直至覆盖整个数组:当
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
时,说明已经完成了字符串的反转。