给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
输入:s = "abcd", t = "abcde" 输出:"e" 解释:'e' 是那个被添加的字母。
思路:
其中T是由S元素随机重新排列的结果,其实就是找T比S多出来的那个字符是什么。
解法1:
意识流就会给每个元素计数。
class Solution {
public:
char findTheDifference(string s, string t)
{
unordered_map<char, int> ss;
unordered_map<char, int> tt;
for(auto a:s)
{
if (ss.find(a) == ss.end())
ss.insert(make_pair(a,1));
else
ss[a] += 1;
}
for(auto b:t)
{
if(ss.find(b) == ss.end())
return b;
if (tt.find(b) == tt.end())
tt.insert(make_pair(b,1));
else
{
if(ss[b] == tt[b])
return b;
tt[b] += 1;
}
}
return 'a';
}
};
方法二:求和
就很妙,多出来一个就可以减出来ASCII码
class Solution {
public:
char findTheDifference(string s, string t) {
int as = 0, at = 0;
for (char ch: s) {
as += ch;
}
for (char ch: t) {
at += ch;
}
return at - as;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/find-the-difference/solution/zhao-bu-tong-by-leetcode-solution-mtqf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法三:位运算
没太懂啥意思。
将两个字符串拼接成一个字符串,则问题转换成求字符串中出现奇数次的字符。
https://leetcode-cn.com/problems/single-number/类似?
class Solution {
public:
char findTheDifference(string s, string t) {
int ret = 0;
for (char ch: s) {
ret ^= ch;
}
for (char ch: t) {
ret ^= ch;
}
return ret;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/find-the-difference/solution/zhao-bu-tong-by-leetcode-solution-mtqf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。