389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
解1
判断s
中是否存在t[i]
,存在则删除,不存在返回t[i]
即为结果
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
var findTheDifference = function(s, t) {
s = s.split('')
for (let i = 0; i < t.length; i++) {
if (s.indexOf(t[i]) != -1) {
s.splice(s.indexOf(t[i]), 1)
} else {
return t[i]
}
}
};
解2
求ASCII码差
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
var findTheDifference = function(s, t) {
let res = 0
for (let i = 0; i < s.length; i++) {
res += s.charCodeAt(i)
res -= t.charCodeAt(i)
}
res -= t.charCodeAt(t.length - 1)
return String.fromCharCode(res * -1)
};
解3
异或运算:
- 任何数于0异或为任何数 0 ^ n => n
- 相同的数异或为0: n ^ n => 0
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
var findTheDifference = function(s, t) {
s = s + t, t = 0
for (let i = 0; i < s.length; i++) {
t ^= s.charCodeAt(i)
}
return String.fromCharCode(t)
};