Skip to content

Latest commit

 

History

History
32 lines (30 loc) · 1.39 KB

383-ransomeNote-leetcode.md

File metadata and controls

32 lines (30 loc) · 1.39 KB

首先题意分析, 有两个字符串a, b, 我们要确定这两个给定的参数是否有a属于b的关系; 遇到属于的情况, 自然而然想到的是用hash表判断, 原因? 一个字: 快! 然后本题并不是简简单的属于问题(第一次以为是),因为题中有一个条件

Each letter in the magazine string can only be used once in your ransom note.

每个a只能在b中出现一次,是不是意味着不能用hashmap来判断了,因为hash里每个属性可是只有一次的哦。 然而,属性名虽然只能出现一次,属性值我们是可以随意设定的,为何不能用属性值去判断次数? 如果一个属性只出现一次,那让它属性值为1.当出现这次属性时,我我们就让属性值减1,就巧妙的做到了判断只出现一次的hashmap方法; 好了, 迅速写好代码:

/**
 * @param {string} ransomNote
 * @param {string} magazine
 * @return {boolean}
 */
var canConstruct = function(ransomNote, magazine) {
    var len = magazine.length, l = ransomNote.length, hashMap = {};
    if(l < 1) return true;
    if(len < 1) return false;
    for(var i = 0; i < len; i++) {
      hashMap[magazine[i]]  hashMap[magazine[i]]++ : ashMap[magazine[i]] = 1
    };
    for(var j = 0; j < l; j++) {
        if(!!hashMap[ransomNote[j]]) hashMap[ransomNote[j]]--;
        else return false;
    }
    return true;
};