今天刷leetcode,遇到了一道题,很有意思,就是给了俩字符串,一个A,一个B,字符串B是这样子的,先把字符串A打乱,然后随机在A中加入一个任意字母,就变成了B。问加入的是啥字母?
举个例子:
A:“abc”
B:“cbea”
那么很明显,加入的字母是e。如何求出来呢?
这里介绍一种非常简单的方法,就是使用异或。
因为字母是char类型,char类型可以当做int来看待,所以,char类型也是可以进行异或操作的。
众所周知。异或有两个性质:
第一个性质是:0异或任何数会得到这个数
比如0^2:
0000
0010
——
0010
还是会得到2。
第二个性质是:一个数异或上它自己等于0
也很好理解吧?比如2^2
0010
0010
——
0000
那么第二个性质,我们可以得出:
a^a^b^b^c^c…=0
现在看这道题,我们现在想要找出B字符串中多出来的那个字母是啥。
我们可以将A中所有的字母全部异或,得到
a^b^c
我们将得到的结果再与B中所有的字母相异或,得到:
a^b^c^c^b^e^a
整理一下就是:
a^a^b^b^c^c^e
最后得到的当然就是e咯。
最后上程序,在程序里我们用r作为最终结果,让r = 0,然后让r去分别异或A中的所有字母和B中的所有字母,因为0异或任何数都得原数,所以给r赋初始值为0。
public class Solution {
public char findTheDifference(String s, String t) {
char r = 0;
for(int i = 0;i<s.length();i++)
r^=s.charAt(i);
for(int i = 0;i<t.length();i++)
r^=t.charAt(i);
return r;
}
}
特此记录,谨防忘记!