难度:easy
因为这道题要求原地反转字符串,所以我们可以采用双指针,从两头开始交换。这里为了熟悉位运算,我们使用位运算的交换方式 ;
Java:
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right) {
s[left] ^= s[right];
s[right] ^= s[left];
s[left] ^= s[right];
left++;
right--;
}
}
}
第一段代码,在循环条件时只能使用 < 而不能使用 <= ,因为当left和right相等时,会错误,而使用如下解法时,则可以使用<=;
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left <= right) {
char temt = s[left];
s[left] = s[right];
s[right] = temt;
left++;
right--;
}
}
}
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(1)