给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。
1. 排序两字符串,逐一对比返回第一个不同的字符
char findTheDifference(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
int i, len = s.size();
for(i = 0; i < len; i++){
if(s[i] != t[i])
return t[i];
}
return t[i];
}
2. 用map计数
//用map
char findTheDifference(string s, string t) {
map<char,int> a;
for(char i:s){
a[i] ++;
}
for(char j:t){
if(-- a[j] == -1) return j;
}
return '0';
}
//用数组
char findTheDifference(string s, string t) {
int *map = new int[255]();//()创建数组同时初始化为0
for(int i = 0;i<s.length();i++)
map[s[i]]++;
for(int i = 0;i<t.length();i++)
{
map[t[i]]--;
if(map[t[i]]<0) return t[i];
}
return NULL;
}
//创建大小为255(ASCⅡ码总数量)的数组,统计所有字符数量的差,返回数量为负数的字符
3. 用t的ASCⅡ码减去s的ASCⅡ码
char findTheDifference(string s, string t) {
int len = s.length();
char res = 0;
for (int i = 0; i < len; i++) {
res += t[i] - s[i];
}
res += t[len];
return res;
}
4. 使用位运算
char findTheDifference(string s, string t) {
char r=0;
for(char c:s)
r = r^c;
for(char c:t)
r = r^c;
return r;
}