Skip to main content

Ransom Note

Problem statement​

Given two strings ransomNote and magazine, return true if ransomNote can be constructed from magazine and false otherwise.

Each letter in magazine can only be used once in ransomNote.

Example 1:

Input: ransomNote = "a", magazine = "b"Output: false

Example 2:

Input: ransomNote = "aa", magazine = "ab"Output: false

Example 3:

Input: ransomNote = "aa", magazine = "aab"Output: true

Constraints:

  • 1 <= ransomNote.length, magazine.length <= 105
  • ransomNote and magazine consist of lowercase English letters.

My solution​

/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
const memo = new Map();

for (const char of magazine.split("")) {
if (!memo.has(char)) {
memo.set(char, 0)
}
memo.set(char, memo.get(char) + 1)
}

for (const char of ransomNote.split("")) {
if (!memo.has(char) || memo.get(char) === 0) {
return false
}

memo.set(char, memo.get(char) - 1)
}

return true;
};