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.
解一
看到题目后想到的最直接的方法。用两个数组分别记录两个字符串中每个字母出现的次数,将两个数组进行比较后,就可以知道多出来的是哪个字母。
class Solution {
public:
char findTheDifference(string s, string t) {
int count1[27] = {0};
for(int i = 0; i < s.length(); i++)
count1[s[i]-'a']++;
for(int i = 0; i < t.length(); i++){
if(count1[t[i]-'a'] == 0) return t[i];
else count1[t[i]-'a']--;
}
return NULL;
}
};
解二
看到题目的有一个标签是bit manipulation,所以简单搜索了一下,了解到异或运算的几个特点。
1.交换律 a^b == b^a
2.结合律 (a^b)^c == a^(b^c)
3.对任意x, 都有x^x=0, x^0=x
4.自反律 a^b^b=a^0=a
所以利用这些特点,只要将两个字符串中的每个字符进行异或,就能得到多出来的那个字母。
class Solution {
public:
char findTheDifference(string s, string t) {
int ans = 0;
for(int i = 0; i < s.length(); i++)
ans ^= (s[i]^t[i]);
return ans^t[t.length()-1];
}
};