题目地址:
https://leetcode-cn.com/probl…
题目描述:
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = “abcd”
t = “abcde”
输出:
e
解释:
‘e’ 是那个被添加的字母。
解答:
这一题可以用两种解法。
解法一:利用hash表存储第一个字符串的字母的数量,然后遍历第二个字符串的时候
先查找到字母,然后把数量减一,如果减完之后小于0,说明这个字母就是多出来的字母
这里的hash表可以用一个数组来代替,因为这里不需要解决hash冲突!!!
java ac代码:
class Solution {
public char findTheDifference(String s, String t) {
int[] hash = new int['z'+1];
for(int i = 0;i < s.length();i++)
hash[s.charAt(i)]++;
for(int i = 0;i < t.length();i++)
if( --hash[t.charAt(i)] < 0)
return t.charAt(i);
return ' ';
}
}
解法二:把这题看作是一个数组里除了一个数出现了一次,其他都出现了偶数次,然后找出这个数,可以
利用异或,因为偶数个自己异或自己为0,而0异或一个数就等于那个数本身,比如说,有偶数个a,现在这
偶数个a异或结果为0,a^a^a^a…^a=0,而0^b=b。
java ac代码
class Solution {
public char findTheDifference(String s, String t) {
char ans = 0;
for(int i = 0;i < s.length();i++)
ans ^= s.charAt(i);
for(int i = 0;i < t.length();i++)
ans ^= t.charAt(i);
return ans;
}
}