颠倒一个字符串。优化时间,优化空间。
此题也就是字符串倒置,类似的问题经常在面试中出现,我在stackoverflow上查到一个很不错的方法
上面这个reverse函数里的while循环中 ^= 操作符是倒置的具体操作
A^=B
B^=A
A^=B
以上三步操作实际就是把A和B的值互换一下,为什么呢?
计算机中任何表示最终都会化为二进制表示
A是一个字符,我们假定它的二进制为 01001100
B是一个字符,我们假定它的二进制为 10100001
^是异或操作符, 也就是说
0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
相同得0,不同得1
那么,A^=B 相当于 A = A^B,
第一步:A = A^B = 01001100 ^ 10100001 = 11101101
第二步:B = B^A = 10100001 ^ 11101101 = 01001100
第三步:A = A^B = 11101101 ^ 01001100 = 10100001
这时发现
A = 10100001
B = 01001100
即A和B的值互换了