问题描述
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
思路
用s建立一个hash表, key为字符,value为出现次数。 用t对这个hash进行反计数。如果某个字符反计数到-1,那么返回这个字符(这就是多出来的)。(方法一)
用异或也可以。字符本质上也是数字。直接异或即可。因为s和t中只有一个字符不同,所以这题目成了找不同。而且利用任何数与0异或都不变的特性,把res初始化为0. (方法二)
方法一
public char findTheDifference(String s, String t) {
int[] arr = new int[26];
for(char c:s.toCharArray()){
arr[c-'a']++;
}
for(char c:t.toCharArray()){
if(arr[c-'a'] < 1){
return c;
}
arr[c-'a']--;
}
return 'a';
}
方法二
public char findTheDifference1(String s, String t) {
int res = 0;
for(int i = 0; i < s.length(); i++){
res ^= s.charAt(i)^t.charAt(i);
}
res ^= t.charAt(s.length());
return (char)res;
}