这道题字符串题算是超级简单了,就是临时变量来变换字符的位置。
但是还是有高端的解法。。。。就是位运算
连临时变量都省了。
高端解法:
先补充知识:异或运算是什么操作?
计算机里面都是无数的门电路,为什么会有异或运算?因为有异或门电路在计算机里面,可以直接使用。
门电路基础认识
下面是异或门电路内部图和真值表
根据真值表可以写出来:
L = (A非) × B + (B非) × A
即:
所以,下面这个高端解法的解释如下:
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while (l < r) {
s[l] ^= s[r]; //构造 a ^ b 的结果,并放在 a 中
s[r] ^= s[l]; //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ b
s[l] ^= s[r]; //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换
l++;
r--;
}
}
}
用临时变量解法:
class Solution {
public void reverseString(char[] s) {
char temp;
int i,j;
i = 0;
j = s.length-1;
while(i < s.length/2){
temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
}