题目:
题解:
- 题目比较简单,直接看代码及注解即可。
代码如下:
class Solution {
public:
//题解1:统计字符串s和t的26个字母的个数,然后遍历26个字母,返回不同数量的字母
char findTheDifference_1(string s, string t) {
int count_s[26],count_t[26];
memset(count_s,0,sizeof(count_s));
memset(count_t,0,sizeof(count_t));
for(char& c:s)count_s[c-'a']++;
for(char& c:t)count_t[c-'a']++;
for(int i=0;i<26;++i){
if(count_s[i]!=count_t[i])
return 'a'+i;
}
return 'a';
}
//题解2:异或,a^a=0,a^0=a
char findTheDifference_2(string s,string t){
int res=0,n=s.size();
for(int i=0;i<n;++i){
//注意assic码整形提升为相对应的10进制数了,所以最后结果要转换为assic码
res^=s[i];
res^=t[i];
}
res^=t[n];
return char(res);
}
//题解3:相减
char findTheDifference_3(string s,string t){
int res=0;
//由于t比s多一位,所以s用减,t用加
for(char c:s)res-=c;
for(char c:t)res+=c;
//最后结果要转换为对应的assic码
return char(res);
}
//题解4:对两个字符串排序之后,相对应的位比较assic码即可
char findTheDifference(string s,string t){
sort(s.begin(),s.end());
sort(t.begin(),t.end());
for(int i=0;i<s.size();++i){
if(s[i]!=t[i])return t[i];
}
return t.back();
}
};