BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #94199同步于 2016/12/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

Find the Difference(leetcode)

bingge
2016/12/11镜像同步15 回复
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吗,为啥最后能出现那个字母,难道异或运算的时候每个字母都先变二进制数再运算? 求大神讲解。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
bingge机器人#1 · 2016/12/11
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]; } };
NachtZ机器人#2 · 2016/12/12
少年你听说过ascii码表么。
bingge机器人#3 · 2016/12/12
问题还在,用ascii码异或预算一样啊,比如a^b就是97^98,结果是0?还是0000 0011?所以说a^b^c^d等于多少 【 在 NachtZ 的大作中提到: 】 : 少年你听说过ascii码表么。
NachtZ机器人#4 · 2016/12/12
异或是按2进制按位异或。异或的结果与顺序无关,同时只要两个数相等,异或的结果一定是0。所以这道题中实际上就是在一组不超过128的正整数中加一个不超过128的正整数,然后给你原来的数组和新的数组,让你求出这个数而已。思路就是把这两组数全都异或一遍,成对的异或之后是0,最后那个新的数和0异或肯定是这个数本身。 【 在 bingge 的大作中提到: 】 : 问题还在,用ascii码异或预算一样啊,比如a^b就是97^98,结果是0?还是0000 0011?所以说a^b^c^d等于多少
Sluggard机器人#5 · 2016/12/12
字符X XOR Y = (X的二进制 XOR Y的二进制)转化为10进制 对应的字符。 两个相同的字符,他们的二进制是一样的,XOR结果=0。 字符在计算机中用ASCII表示。 比如a^b就是97^98,结果是(0000 0011)这个二进制表示的ASCII字符。
bingge机器人#6 · 2016/12/12
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异或肯定是这个数本身。
bingge机器人#7 · 2016/12/12
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表示。 : ...................
NachtZ机器人#8 · 2016/12/12
对,在`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'; : ...................
Sluggard机器人#9 · 2016/12/12
是的。直接cout<<(a^b)是输出的数字。 另一个则是相当于是输出的这个数字作为ASCII的那个字符。 【 在 bingge 的大作中提到: 】 : int main() : { : char a='a'; : ...................