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

在這裏插入圖片描述

關於我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章