Description:
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.
思路:
由于两个字符串里的顺序是随机的,可以利用字符串s的字符(字母)构造一个字符数组,数组的值为字符出现的次数,然后检查字符串t的字符,进行一次比较即可,这里面会有2次循环,但是每次都只有一层,时间复杂度为O(n)。
下面是使用C++的实现过程:
class Solution {
public:
char findTheDifference(string s, string t) {
vector<int> chars(26);
for (int i=0;i<s.length();i++) {
chars[s[i] - 'a']++;
}
for (int i=0;i<t.length();i++) {
chars[t[i] - 'a']--;
if (chars[t[i] - 'a'] < 0) {
return c;
}
}
throw std::runtime_error("Failed to find the diff.");
}
};
这里给一个更巧妙的解法,我们可以使用逻辑运算里的异或,即比较两个数值,相同为0,不同为1。那么对于字符串来说,对每个字符进行异或运算,就能找到新增加的字符。
下面是使用C++的实现过程:
class Solution {
public:
char findTheDifference(string s, string t) {
char c=0;
for(int i=0;i<s.length();i++){
c^=s[i];
}
for(int i=0;i<t.length();i++){
c^=t[i];
}
return c;
}
};
还有一种巧妙的方法,由于本题是针对字母表的26个字母,因此可以构建一个字母表数组,,把s字符串加入到