383. 赎金信

  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 由小写英文字母组成

解法一

/**
 使用数组统计magazine中字符的个数,声明一个长度为26的数组,初始化数组中的数据为0,将当前字符的字符码减去字符a的字符码,就可以将a-z字符放置在长度为26的数组中,然后使用for循环遍历ransomNote字符串,如果对应的位置为0,那说明在magazine中没有对应的字符了,直接返回false,否则将当前位置字符个数减一,最后遍历完成可以说明ransomNote中有的字符,在magazine中均存在,返回true即可
 * @param {string} ransomNote
 * @param {string} magazine
 * @return {boolean}
 */
var canConstruct = function(ransomNote, magazine) {
    let arr = new Array(26).fill(0);
    let aCode = 'a'.charCodeAt();
    for(let i of magazine){
        let index = i.charCodeAt()-aCode;
        arr[index]++;
    }

    for(let j of ransomNote){
        let index = j.charCodeAt()-aCode;
        if(arr[index]==0) return false;
        arr[index]--;
    }
    return true;
};

版权声明:本文为cjhxydream原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。