题目网址:https://leetcode-cn.com/problems/find-the-difference/submissions/
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
这道题有两个思路:
思路1:使用哈希表,用哈希表进行运算,遍历第一个字符串标记出现的字符数量,再遍历第二个减去出现的数量,直到,遇到0或者原哈希表就不存在的情况。
思路2:通过异或
我之前写过一篇博客,例如有一个数组{1,2,3,4,3,2,1}
有一个数字只出现1次,其余数字都是成对出现的。那么要揪出这只单身狗,我们就把数组里面的每个数字都异或一遍。
根据异或的性质,一个数异或本身得到0,一个数异或0得到本身,异或具有交换性
那么遍历一遍后,就可以得到4了
在本题同样使用,我们只需要合并两个数组,并且转成char数组,这个数组中,每个字符都有它的ASCII码,我们将它们都异或一遍,就可以揪出这个新添加的数了。
具体代码如下:
class Solution {
public char findTheDifference(String s, String t) {
String s3 = s + t;
char[] arr = s3.toCharArray();
int tmp = 0;
for(int i = 0 ; i < arr.length; i++){
tmp ^= arr[i];
}
return (char)tmp;
}
}