题目
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
C++解法
方法一:用字典统计s和t每个字符出现的次数。
#include <iostream>
#include <vector>
#include <map>
#include <set>
using namespace std;
class Solution {
public:
char findTheDifference(string s, string t) {
map<char, int> scounter, tcounter;
for (auto c: s) ++scounter[c];
for (auto c: t) ++tcounter[c];
for (auto item: tcounter) {
if (tcounter[item.first] != scounter[item.first]) return item.first;
}
return -1;
}
};
int main(int argc, const char * argv[]) {
Solution solution;
cout << solution.findTheDifference("abcd", "abcde") << endl;
return 0;
}
方法二:
由于s和t只有一个字符的差别,用异或操作可以把这个字符还原出来。
class Solution {
public:
char findTheDifference(string s, string t) {
char value = 0;
for (auto c: s) value ^= c;
for (auto c: t) value ^= c;
return value;
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-difference
网友评论