반응형
Ransom Note
Given two strings ransomNote
and magazine
, return true
if ransomNote
can be constructed by using the letters 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
andmagazine
consist of lowercase English letters.
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
if len(ransomNote) > len(magazine) :
return False
hashTable = {}
for maga in magazine :
hashTable[maga] = 1 + hashTable.get(maga, 0)
for ransom in ransomNote :
if ransom not in hashTable or hashTable[ransom] <= 0 :
return False
hashTable[ransom] -= 1
return True
magazine 에 있는 글자들을 카운팅 한 후 ransomNote 의 글자들과 비교하면서 카운팅을 한다.
만약 ransomNote 에 있는 글자 ransom 이 hashTable 에 없거나 0 이하의 숫자이면(==0 이라고 해도 된다) False 를 리턴, ransomNote의 글자가 모두 들어있다면 마지막에 True를 리턴해 준다.
문제를 보다 보니, ransomNote의 글자수가 magazine보다 많으면 애초에 문제가 해결되지 않기 때문에, 가장 위에 가지치기 형식으로 넣어두었다.
반응형
'알고리즘 스터디' 카테고리의 다른 글
[Leetcode/파이썬] 300. Longest Increasing Subsequence (0) | 2025.05.18 |
---|---|
[Leetcode/파이썬] 34. Find First and Last Position of Element in Sorted Array (0) | 2025.05.18 |
[Leetcode/파이썬] 128. Longest Consecutive Sequence (0) | 2025.05.11 |
[Leetcode/파이썬] 172. Factorial Trailing Zeroes (0) | 2025.05.11 |
[Leetcode/파이썬] 66. Plus One (0) | 2025.05.11 |