[LeetCode] 389_找不同
题目要求
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = “abcd”
t = “abcde”
输出:
e
解释:
‘e’ 是那个被添加的字母。
题目分析
- 最开始的时候我想到的是最简陋的,定义一个256的数组,对于s进行遍历,统计每一个字符的数目,然后对t进行遍历,寻找多出来的那个字符
- 在参考了排名靠前的代码后,我将代码进行了修正,不再需要额外的空间,而是只使用一个额外字符,对s中每一位进行异或,然后对t中每一位进行异或。
- 额外字符c的初始值设为0,因为0异或任何数都是0,而任何数异或它本身都是0(也就是说偶数次会抵消)
代码
class Solution {
public:
char findTheDifference(string s, string t) {
char c=0;
for(int i=0;i<s.length();++i)c^=s[i];
for(int i=0;i<t.length();++i)c^=t[i];
return c;
}
};