Top Interview 150
The Ransom Note problem is a simple string manipulation challenge that tests your ability to manage character counts efficiently. Let’s solve LeetCode 383 step by step.
🚀 Problem Description
Given two strings ransomNote and magazine:
- Return
trueifransomNotecan be constructed using letters frommagazine. - Each letter in
magazinecan only be used once inransomNote.
💡 Examples
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
🏆 JavaScript Solution
We solve this problem by counting the occurrences of each letter in magazine and comparing them with the required counts for ransomNote.
Implementation
var canConstruct = function(ransomNote, magazine) {
const charCount = {};
for (let char of magazine) {
charCount[char] = (charCount[char] || 0) + 1;
}
for (let char of ransomNote) {
if (!charCount[char] || charCount[char] <= 0) {
return false;
}
charCount[char]--;
}
return true;
};
🔍 How It Works
-
Count Characters in Magazine:
- Create a hash map (
charCount) to store the frequency of each character inmagazine.
- Create a hash map (
-
Validate Against Ransom Note:
- Iterate through each character in
ransomNote. - Check if the character is available in
charCount. - If not, return
false. - Decrement the count of the character in
charCount.
- Iterate through each character in
-
Return Result:
- If all characters are found with sufficient counts, return
true.
- If all characters are found with sufficient counts, return
🔑 Complexity Analysis
-
Time Complexity:
O(n+m), wherenis the length of magazine andmis the length of ransomNote.- Counting characters in magazine takes
O(n). - Validating ransomNote takes
O(m).
- Counting characters in magazine takes
-
Space Complexity:
O(k), wherekis the number of unique characters inmagazine.
📋 Dry Run
Input: ransomNote = "aa", magazine = "aab"
Output: true
✨ Pro Tips for Interviews
-
Clarify Constraints:
- Ensure that
ransomNoteandmagazineonly contain lowercase letters. - Ask about edge cases, such as empty strings.
- Ensure that
-
Discuss Optimizations:
- Highlight how using a hash map ensures efficient character counting.
-
Edge Cases:
-
ransomNotelonger thanmagazine→ immediately returnfalse. - All characters in
magazinebut insufficient counts.
-
📚 Learn More
Check out the full explanation and code walkthrough on my previous Dev.to post:
👉 Set Matrix Zeroes – JavaScript Solution
What’s your preferred method to solve this problem? Let’s discuss! 🚀

