给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = “abcd”
t = “abcde”
输出:
e
解释:
‘e’ 是那个被添加的字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-difference
题目分析
方法一:
快排一一比较直到不同返回
方法二:
哈希表存储,先将s数组元素存入哈希数组中统计个数,在将t数组中的元素减去,如果个数为负,则返回该值
方法三:
字符串ASCII差值法,直接加上所有t数组的值减去所有s数组中的值
方法四:
异或,如果相同异或为零,剩下的就是要求的值
完整代码
方法一:
int cmp(const void *a,const void *b)
{
return *(char *)a-*(char *)b;
}
char findTheDifference(char * s, char * t){
qsort(s,strlen(s),sizeof(s[0]),cmp);
qsort(t,strlen(t),sizeof(t[0]),cmp);
for(int i=0;i<strlen(t);i++)
{
if(s[i]!=t[i])
return t[i];
}
return false;
}
方法二:
char findTheDifference(char * s, char * t){
char letter[26];
memset(letter,0,sizeof(letter));
for(int i=0;i<strlen(s);i++)
letter[s[i]-'a']++;
for(int i=0;i<strlen(t);i++)
{
letter[t[i]-'a']--;
if(letter[t[i]-'a']<0)
return t[i];
}
return false;
}
方法三:
char findTheDifference(char * s, char * t){
char sum=0;
for(int i=0;i<strlen(t);i++)
{
sum+=t[i]-s[i];
}
return sum;
}
方法四:
char findTheDifference(char * s, char * t){
char sum=0;
for(int i=0;i<strlen(t);i++)
{
sum=sum^t[i]^s[i];
}
return sum;
}