问题描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题
思路
使用双指针法,left指向s[0],right指向s[s.length - 1];两指针相向遍历数组,每次交换两位置的字符,直到两指针相遇
code
java
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
//当left与right不相等时,交换left和right处的字符
while(left <= right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
java
class Solution {
public void reverseString2(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right){
s[left] ^= s[right]; //构造 a ^ b 的结果,并放在 a 中
s[right] ^= s[left]; //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ b
s[left] ^= s[right]; //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换
left++;
right--;
}
}
}