题目
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例 1:
输入:s = “abcd”, t = “abcde”
输出:“e”
解释:‘e’ 是那个被添加的字母。
方法一:位运算
我们知道
a^0=a; a ^a =0;
所以如果是多余的字符,则结果不会为0,因为是在s的基础上进行新增一个字符,所以除开新增的字符,在异或过程中,两两抵消,最后剩下的就是新增的字符了。
// 位运算
public char findTheDifference(String s, String t) {
int temp = 0;
for (int i = 0; i < s.length(); i++) {
temp ^= s.charAt(i);
}
for (int i = 0; i < t.length(); i++) {
temp ^= t.charAt(i);
}
//temp=0^a^b^c^d;
//又继续temp^a^b^c^d^e;
return (char) temp;
}
方法二:求和
public char findTheDifference(String s, String t) {
int s1 = 0;
int s2 = 0;
for (int i = 0; i < s.length(); i++) {
s1 += s.charAt(i);
}
for (int i = 0; i < t.length(); i++) {
s2 += t.charAt(i);
}
return (char) (s2 - s1);
}
方法三:计数
public char findTheDifference(String s, String t) {
if (s.length() == 0) {
return t.charAt(0);
}
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
count[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
count[t.charAt(i) - 'a']--;
}
for (int i = 0; i < count.length; i++) {
if (count[i] != 0) {
return (char) (i + 'a');
}
}
return ' ';
}
end.