Given two strings s and t which consist of only lowercase letters.
String t is generated by random shuffling string s and then add one more letter at a random position.
Find the letter that was added in t.
Example:
Input: s = "abcd" t = "abcde" Output: e Explanation: 'e' is the letter that was added.
思路一:
为两个字符串分别建立map,存储字符串和个数的关系。则只需找出字符个数不一样的字符,即为增加的字符。
Code1:
class Solution {
public:
char findTheDifference(string s, string t) {
map<char,int> sm;
map<char,int> tm;
for(int i=0;i<s.size();i++) sm[s[i]]++;
for(int i=0;i<t.size();i++) tm[t[i]]++;
for(auto & n:tm){
if(n.second!=sm[n.first]) return n.first;
}
}
};
思路二:
使用异或操作,因为除了增加的字符为奇数个,其他字符的个数均为偶数个。原理同136. Single Number。
code2:
class Solution {
public:
char findTheDifference(string s, string t) {
char r=0;
for(char c:s) r ^=c;
for(char c:t) r ^=c;
return r;
}
};