LeetCode题解:389.找不同

找不同

一、LeetCode题解

瞧一瞧(求star!)

二、算法题

题目

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。

示例:

输入:
s = "abcd"
t = "abcde"

输出:e

解释:
'e' 是那个被添加的字母。

解法一 (Map)

思路

  • 统计s字符串所有的字母
  • 逐位与s字符串做抵消

代码

var findTheDifference = function(s, t) {
    var obj = {}
    for(let i = 0; i < s.length; i++){
        if(obj[s[i]]){
            obj[s[i]] += 1
        }else{
            obj[s[i]] = 1
        }
    } // 统计s字符串的所有次数
    for(let i = 0; i < t.length; i++){
        if(obj[t[i]]){
            obj[t[i]] -= 1
        }else{
            return t[i]
        }
    } // 逐位抵消
    return -1
};

结果

在这里插入图片描述

解法二(异或)

思路

  • 1 ^ 2 ^ 1 = 2 利用数字异或的原理,相同数字异或一定抵消。
  • 两个字符串拼接后遍历一次
    • 字符串->数字->异或->转回字符串

代码

var findTheDifference = function(s, t) {
    var str = s+t
    var a = str.charCodeAt(0)
    for(let i = 1; i < str.length; i++){
        a = a ^ str.charCodeAt(i)
    }
    return String.fromCharCode(a)
};
结果

在这里插入图片描述

关于我

猜你喜欢

转载自blog.csdn.net/jbj6568839z/article/details/106236988
今日推荐