题目
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
输入:[“h”,“e”,“l”,“l”,“o”] 输出:[“o”,“l”,“l”,“e”,“h”]
思路
不直接使用字符串的库函数
java代码
class Solution{
public void reverseString(char[] s){
int l = 0;
int r = s.length - 1;
while(l < r){
s[l] ^= s[r];
s[r] ^= s[l];
s[l] ^= s[r];
l ++;
r --;
}
}
}
补充知识:
swap交换两个数有两种方式
- 方式一
int tmp = s[i];
s[i] = s[j];
s[j] = tmp;
- 方式二(异或运算)
原理:a ^ a == 0; a ^ 0 ==a
s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];