给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = “abcd”
t = “abcde”
输出:
e
解释:
‘e’ 是那个被添加的字母。
分析:
题解一:
常规解法,开数组存第一个字符串对应字符个数,再减去第二个字符串对应字符,剩下的一个就是解
class Solution {
public char findTheDifference(String s, String t) {
int[] ans = new int[26];
for (int i = 0; i < s.length(); i++) {
ans[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
ans[t.charAt(i) - 'a']--;
}
for (int i = 0; i < ans.length; i++) {
if (ans[i] < 0)
return (char) (i + 'a');
}
return ' ';
}
}
题解二:
利用异或的性质,详情见:136. 只出现一次的数字,
异或完,剩下的数就是答案,异或运算比前面快一丢丢
int ans = 0;
for (char c : s.toCharArray()) {
ans ^= c;
}
for (char c : t.toCharArray()) {
ans ^= c;
}
return (char) ans;
题解三:
既然异或可以,那么加减也是可以的对吧?最快了
(仔细考虑是否真的可行?)
class Solution {
public char findTheDifference(String s, String t) {
int ans = 0;
for (char c : s.toCharArray()) {
ans -= c;
}
for (char c : t.toCharArray()) {
ans += c;
}
return (char) ans;
}
}