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)
};

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注