题目来源:链接: [https://leetcode-cn.com/problems/find-the-difference/]
389. 找不同
1.问题描述
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例1:
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
2.我的解决方案
easy 类型题目。我感觉思想并不easy。
这个题主要想考察 哈希映射 或者 位运算 。
但是我都没用,用了个投机取巧的方法,哈哈哈。
我的做法就是 把数字全部换算成 十进制,然后相减。得到的数 + ‘a’ 转换成字符就ok了
因为 只添加了 一个 元素。
我的AC代码:
class Solution {
public:
char findTheDifference(string s, string t) {
int a = 0;
for(auto tc : t){
a = a + (tc-'a');
}
for(auto sc : s){
a = a - (sc-'a');
}
return (char)(a + 'a');
}
};
3.大神们的解决方案
方法一:(哈希映射)
class Solution {
public:
char findTheDifference(string s, string t) {
map<char,int> ms;
map<char,int> mt;
for(int i=0;i<s.size();i++){
if(ms.count(s[i])) ms[s[i]]++;
else ms[s[i]]=1;
}
for(int i=0;i<t.size();i++){
if(mt.count(t[i])) mt[t[i]]++;
else mt[t[i]]=1;
}
for(int i=0;i<t.size();i++){
if(mt[t[i]]!=ms[t[i]]||ms.count(t[i])==0) return t[i];
}
return 0;
}
};
方法二:(位运算)
class Solution {
public:
char findTheDifference(string s, string t) {
char ci = t[0];
for (int i = 0; i < s.size(); ++i){
ci ^= s[i];
ci ^= t[i+1];
}
return ci;
}
};
4.我的收获
主要还是对 哈希映射 和 位运算 不熟悉。。。
2019/4/14 胡云层 于南京 54