""" 0383.1 - Solution 1 - Hash Map (Counter) Approach """
#####################################################################################
# Imports
#####################################################################################
from collections import Counter
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
"""Ransom Note Function"""
mag_count = Counter(magazine)
for char in ransomNote:
if mag_count[char] <= 0:
return False
mag_count[char] -= 1
return True
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().canConstruct("a", "b")) # False
print(Solution().canConstruct("aa", "ab")) # False
print(Solution().canConstruct("aa", "aab")) # True
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()
""" 0383.2 - Solution 2 - Counter Subtraction Approach """
#####################################################################################
# Imports
#####################################################################################
from collections import Counter
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
"""Ransom Note Function"""
return not (Counter(ransomNote) - Counter(magazine))
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().canConstruct("a", "b")) # False
print(Solution().canConstruct("aa", "ab")) # False
print(Solution().canConstruct("aa", "aab")) # True
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()