【JS每日一算法:剑指Offer系列】🟩160.赎金信(哈希表)

70 阅读1分钟

给你两个字符串: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 <= 105
  • ransomNote 和 magazine 由小写英文字母组成

题解:

个人博客

更多JS版本题解点击链接关注该仓库👀

/**
 * @description: 哈希表   TC:O(n)  SC:O(n)
 * @author: JunLiangWang
 * @param {*} ransomNote 给定字符串
 * @param {*} magazine  给定字符串
 * @return {*}
 */
function hashMap(ransomNote, magazine){
    /**
     * 本方案使用hashmap的方式,首先遍历父字符串
     * 利用Map记录字符串中出现的字符的数量。
     * 然后遍历子字符串,如果存在map中不存在的字符
     * 或者字符数量多于map中该字符的数量,则返回false
     * 否则返回true
     */
    let map=new Map();
    for(let i=0;i<magazine.length;i++){
        let count=map.get(magazine[i])
        map.set(magazine[i],count==undefined?1:count+1);
    }
    for(let i=0;i<ransomNote.length;i++){
        let count=map.get(ransomNote[i])
        if(!count)return false
        map.set(ransomNote[i],count-1)
    }
    return true
}