问题描述:Find the Difference
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:
eExplanation:
‘e’ is the letter that was added.
思路:第一次我用的是c++中的set来实现这个功能,因为set可以通过逻辑操作来求差集,然后又可以通过之前的异或操作来实现求两个集合中不同的部分,不过这个方法限制在只能求一个字符,正好这个题目满足。
代码:
#include<queue>
#include<set>
using namespace std;
char findTheDifference(string s, string t) {
set<char> setS,setT;
char res;
for(int i=0;i<sizeof(t);i++){
setT.insert(t[i]);
}
for(int i=0;i<sizeof(s);i++){
setS.insert(s[i]);
}
set<char>::iterator it = setT.begin();
while(it != setT.end()){
if(setS.find(*it) == setS.end()) res = *it;
it++;
}
return res;
}
int main(){
string s="abcdkt";
string t="abcdekt";
cout<<findTheDifference(s,t)<<endl;
}
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;
}
};
复杂度:第一种算法复杂度是 O(n) ,第二种算法复杂度是 O(1) .