一、题目描述
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入: ransomNote = "a", magazine = "b"
输出: false
示例 2:
输入: ransomNote = "aa", magazine = "ab"
输出: false
示例 3:
输入: ransomNote = "aa", magazine = "aab"
输出: true
提示:
1 <= ransomNote.length, magazine.length <= 105ransomNote和magazine由小写英文字母组成
二、思路分析
- 定义一个对象,存储
magazine中的每个字符出现的次数 - 遍历
ransomNote,如果字符没有出现在对象中,则返回false;如果存在,则让对应字符次数递减,如果小于0了,表示ransomNote中对应的字符偏多,不满足,返回false
三、代码答案
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function (ransomNote, magazine) {
if (ransomNote.length > magazine.length) return false;
const mp = {}
for (let i = 0; i < magazine.length; i++) {
if (!mp[magazine[i]]) {
mp[magazine[i]] = 1
} else {
mp[magazine[i]]++
}
}
for (let i = 0; i < ransomNote.length; i++) {
if (!mp[ransomNote[i]]) {
return false
} else {
mp[ransomNote[i]]--
if (mp[ransomNote[i]] < 0) {
return false
}
}
}
return true
};