题目描述如下:
这道题的类型是简单,但是解法上还是比较有意思 的,下面按照容易想到的程度说一下三种方法:
方法一:计数法
应为题目中说了s和t只包含小写字母,我们可以用一次长度为26的数组存储字符串S中各个字符出现的次数,如果t中的字符在
数组中读出的出现次数为0,则是多出来的,代码实现如下:
public char findTheDifference(String s, String t) {
int[] chars=new int[26];
for(int i=0;i<s.length();i++){
chars[s.charAt(i)-'a']++;
}
for(int i=0;i<t.length();i++){
int index=t.charAt(i)-'a';
if(chars[index]==0){
return t.charAt(i);
}
chars[index]--;
}
return ' ';
}
方法二:求总和差
这个是把各个字符相加,最后两个结果和的差值就是多余的那个字符,代码实现如下:
public char findTheDifference(String s, String t) {
long sresult=0;
for(int i=0;i<s.length();i++){
sresult=sresult+s.charAt(i);
}
long tresult=0;
for(int i=0;i<t.length();i++){
tresult=tresult+t.charAt(i);
}
return (char)(tresult-sresult);
}
方法三:异或位运算
异或位运算(^):两个位相同为0,相异为1 ,两个字符串相同的部分都会相互抵消为0,,剩下的就是多余的那个字符,代码
实现如下:
public char findTheDifference(String s, String t) {
int length = s.length();
char c = t.charAt(length);
for(int i=0;i<length;i++){
c ^= s.charAt(i);
c ^= t.charAt(i);
}
return c;
}