力扣面试150(31/150)
7.16 383. 赎金信
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
我的思路:
先遍历magazine形成magzine哈希表
len代表的是ransomNote的长度,遍历ransomNode,如果magzine里面由而且值不为0
就–
如果len的值为0就返回true
如果没有就要返回false,count如果小于0也要返回false
我的代码:
/*** @param {string} ransomNote* @param {string} magazine* @return {boolean}*/
var canConstruct = function(ransomNote, magazine) {let magaMap = new Map();for(let i = 0 ; i < magazine.length ; i++){if(magaMap.has(magazine[i])){let count = magaMap.get(magazine[i]) + 1;magaMap.set(magazine[i] , count);}else {magaMap.set(magazine[i] ,1);}}let len = ransomNote.length;let lenths = len;for(let j = 0 ; j < lenths ; j++){if(magaMap.has(ransomNote[j])){len--;let count = magaMap.get(ransomNote[j]) - 1;if(count < 0){return false;}else {magaMap.set(ransomNote[j] ,count);if(magaMap.get(magazine[j]) === 0){magaMap.delete(magazine[j]);}if(len === 0){return true;}}}}return false;
};
总结:一道很基础的哈希算法题,主要是熟悉哈希的一些api