1. 题目
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
2. 解题
2.1 土办法,哈希map
class Solution {
public:char findTheDifference(string s, string t) {unordered_map<char,int> m1;unordered_map<char,int> m2;int i;for(i = 0; i < s.size(); ++i){if(m1.find(s[i]) == m1.end())m1[s[i]] = 1;elsem1[s[i]]++;}for(i = 0; i < t.size(); ++i){if(m2.find(t[i]) == m2.end())m2[t[i]] = 1;elsem2[t[i]]++;}for(auto it = m2.begin(); it != m2.end(); ++it){auto iter = m1.find(it->first);if(iter == m1.end() || (iter != m1.end() && iter->second != it->second))return it->first;}return 'a';}
};
2.2 位运算 ^ 异或
- 两字符串的所有字符 全部异或
class Solution {
public:char findTheDifference(string s, string t) {int i;char ch = 0;for(i = 0; i < s.size(); ++i)ch ^= s[i]^t[i];ch ^= t[i];return ch;}
};
2.3 两字符串分别求和做差
class Solution {
public:char findTheDifference(string s, string t) {int i,sum = 0;for(i = 0; i < s.size(); ++i)sum += t[i]-s[i];sum += t[i];return (char)sum;}
};
三种方法,位运算最快