1.异或性质
(1)交换律: A ^ B = B ^ A
(2)结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )
(3)自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)
任何数和0异或,都得其本身。
异或应用:
如,两数的交换
//一般做法
temp=a;
b=a;
b=temp;
//异或(若a=3,b=4)
a=a^b; //a=3^4
b=a^b; //b=(3^4)^4=3^(4^4)=3^0=3;
a=a^b; //a=3^4^3=4
最终得a=4,b=3
再比如:
给定两个字符串
s
和t
,它们只包含小写字母。字符串
t
由字符串s
随机重排,然后在随机位置添加一个字母。请找出在
t
中被添加的字母。示例 1:
输入:s = "abcd", t = "abcde" 输出:"e" 解释:'e' 是那个被添加的字母。示例 2:
输入:s = "", t = "y" 输出:"y"
class Solution {
public:
char findTheDifference(string s, string t) {
for (int i = 0; i < s.size(); ++i) t[0] ^= s[i];
for (int i = 1; i < t.size(); ++i) t[0] ^= t[i];
return t[0];
}
};