DEV Community

Aroup Goldar Dhruba
Aroup Goldar Dhruba

Posted on • Edited on

2 1

LeetCode: Ransom Note

Problem Statement

Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines; otherwise, it will return false.

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

Example

Note:
You may assume that both strings contain only lowercase letters.

canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true
Enter fullscreen mode Exit fullscreen mode

Solution Thought Process

This is a well known hash map problem.

  • Find the frequency of each element in the magazine, store them in a hash map.
  • For each element in the ransom note, check the value in the map.
    • If it doesn't exist, we can't make the ransom note.
    • If it exists, then check if it's unused frequency is greater than 0.
    • If it's greater than 0, then decrease the frequency to use it in the ransom note.
    • If it's not greater than 0, then we have used up all of the characters available in the magazine, so we should return false.

Solution

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map<char,int>M;
        bool result = true;
        for(int i=0;i<magazine.size();i++)
        {
            if(M.find(magazine[i])==M.end())
            {
                M[magazine[i]]=1;
            }
            else {
                M[magazine[i]]++;
            }
        }
        for(int i=0;i<ransomNote.size();i++)
        {
            if(M.find(ransomNote[i])==M.end())
            {
                result = false;
                break;
            }
            else 
            {
                if(M[ransomNote[i]]>0)
                {
                    M[ransomNote[i]]--;
                }
                else {
                    result = false;
                    break;
                }
            }
        }
        return result;
    }
};
Enter fullscreen mode Exit fullscreen mode

Complexity:

Time Complexity: O(m + n), where m = length of magazine and n = length of ransom note

Space Complexity: O(m) where m = length of the magazine

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay