找不同
一、LeetCode題解
瞧一瞧(求star!)
- LeetCode題解Javascript版本:Gitbook版本傳送門
- LeetCode題解Javascript版本:CSDN傳送門
- 前端進階筆記:Gitbook傳送門
二、算法題
題目
給定兩個字符串 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)
};
結果
關於我
- decs: 19年畢業的前端開發一枚,沉迷Js
- E-mail: [email protected]
- 個人博客: CSDN
- GitHub: 傳送門