找不同
一、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: 传送门