这一题比较简单,使用一个map来计数即可解决
先遍历magazine里面的字符放入map中进行计数,再遍历ransomNote的字符,进行减数
如果某个计数小于0,或者不存在的时候,返回false
遍历完了,返回true
使用map
var canConstruct = function (ransomNote, magazine) {
let map = new Map()
for (let i = 0; i < magazine.length; ++i) {
if (map.has(magazine[i])) {
map.set(magazine[i], map.get(magazine[i]) + 1)
} else {
map.set(magazine[i], 1)
}
}
for (let i = 0; i < ransomNote.length; ++i) {
if (map.has(ransomNote[i])) {
let cnt = map.get(ransomNote[i]) - 1
if (cnt < 0) return false
map.set(ransomNote[i], cnt)
} else {
return false
}
}
return true
};
使用数组
这里使用数组会比较好点,在空间复杂度上会低一些
var canConstruct = function (ransomNote, magazine) {
let map = new Array(26).fill(0)
for (let c of magazine) {
map[c.charCodeAt(0) - 'a'.charCodeAt(0)]++
}
for (let c of ransomNote) {
let cnt = map[c.charCodeAt(0) - 'a'.charCodeAt(0)]
if (cnt <= 0) return false
map[c.charCodeAt(0) - 'a'.charCodeAt(0)]--
}
return true
};