LeetCode389.找不同 C语言编辑
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入: s = “abcd” t = “abcde”
输出: e
解释: ‘e’ 是那个被添加的字母。
第一次写的时候是用的比较普通的方法:
char findTheDifference(char* s, char* t) {
int i,a[26]={0};
for(i=0;i<strlen(t);i++)
{
if(i<strlen(s))
a[(int)(s[i] - 'a')] ++; //在s数组里的26位字母在a数组的位置上加1
a[(int)(t[i] - 'a')]--; //在t数组里的26位字母在a数组的位置上减1
}
for(i=0;i<26;i++)
if(a[i] < 0)
break;
return i+'a';
}
后面看到某位大佬的数学解答。其实就是相同的数异或为0,而俩数组只有一个字母不同,所以只要全都异或一遍就只剩下那个不同的字母的ascuii码,ascuii码是int类型,只要强制类型转换为char就行了。
char findTheDifference(char* s, char* t) {
int len=strlen(s);
int result=(int)t[0];
for(int i=0;i<len;i++){
result^=s[i];
result^=t[i+1];
}
return (char)result;
}