返回信息流Given two strings s and t which consist of only lowercase letters.
String t is generated by random shuffling string s and then add one more letter at a random position.
Find the letter that was added in t.
Example:
Input:
s = "abcd"
t = "abcde"
Output:
e
Explanation:
'e' is the letter that was added.
看到的解法是用异或运算,每个字符做异或,最后留下那个单独的,话说异或不是相同为0,不同为1吗,为啥最后能出现那个字母,难道异或运算的时候每个字母都先变二进制数再运算?
求大神讲解。
这是一条镜像帖。来源:北邮人论坛 / cpp / #94199同步于 2016/12/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Find the Difference(leetcode)
bingge
2016/12/11镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
class Solution {
public:
char findTheDifference(string s, string t) {
for(int i=1;i<s.length();i++)
s[0]^=s[i];
for(int i=0;i<t.length();i++)
s[0]^=t[i];
return s[0];
}
};
问题还在,用ascii码异或预算一样啊,比如a^b就是97^98,结果是0?还是0000 0011?所以说a^b^c^d等于多少
【 在 NachtZ 的大作中提到: 】
: 少年你听说过ascii码表么。
异或是按2进制按位异或。异或的结果与顺序无关,同时只要两个数相等,异或的结果一定是0。所以这道题中实际上就是在一组不超过128的正整数中加一个不超过128的正整数,然后给你原来的数组和新的数组,让你求出这个数而已。思路就是把这两组数全都异或一遍,成对的异或之后是0,最后那个新的数和0异或肯定是这个数本身。
【 在 bingge 的大作中提到: 】
: 问题还在,用ascii码异或预算一样啊,比如a^b就是97^98,结果是0?还是0000 0011?所以说a^b^c^d等于多少
字符X XOR Y = (X的二进制 XOR Y的二进制)转化为10进制 对应的字符。
两个相同的字符,他们的二进制是一样的,XOR结果=0。
字符在计算机中用ASCII表示。
比如a^b就是97^98,结果是(0000 0011)这个二进制表示的ASCII字符。
int main()
{
char a='a';
char b='b';
cout<<(a^b);
}
--------------------------------------------
int main()
{
char a='a';
char b='b';
char c=a^b;
cout<<c;
}
上边这俩输出结果不同,本质区别在哪呀,a^b输出的是十进制数?char c=a^b是做了类型转换?
【 在 NachtZ 的大作中提到: 】
: 异或是按2进制按位异或。异或的结果与顺序无关,同时只要两个数相等,异或的结果一定是0。所以这道题中实际上就是在一组不超过128的正整数中加一个不超过128的正整数,然后给你原来的数组和新的数组,让你求出这个数而已。思路就是把这两组数全都异或一遍,成对的异或之后是0,最后那个新的数和0异或肯定是这个数本身。
int main()
{
char a='a';
char b='b';
cout<<(a^b);
}
--------------------------------------------
int main()
{
char a='a';
char b='b';
char c=a^b;
cout<<c;
}
上边这俩输出结果不同,本质区别在哪呀,a^b输出的是十进制数?char c=a^b是做了类型转换?
【 在 Sluggard 的大作中提到: 】
: 字符X XOR Y = (X的二进制 XOR Y的二进制)转化为10进制 对应的字符。
: 两个相同的字符,他们的二进制是一样的,XOR结果=0。
: 字符在计算机中用ASCII表示。
: ...................
对,在`cout`里面自动调整输出格式了。你可以试试看c语言的`printf`。
```
int main(){
char a = 'a';
char b = 'b';
char c = a^b;
printf("Num:%d, Char:%c.\n",c,c);
return 0;
}
```
【 在 bingge 的大作中提到: 】
: int main()
: {
: char a='a';
: ...................
是的。直接cout<<(a^b)是输出的数字。
另一个则是相当于是输出的这个数字作为ASCII的那个字符。
【 在 bingge 的大作中提到: 】
: int main()
: {
: char a='a';
: ...................