랜섬노트
Ransom Note - LeetCode
Can you solve this real interview question? 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 ranso
leetcode.com
두 개의 문자열 ransomNoteand 가 주어지면 magazine, trueif 는 and else ransomNote의 문자를 사용하여 구성될 수 있습니다 .magazinefalse
의 각 문자는 magazine에서 한 번만 사용할 수 있습니다 ransomNote.
예시 1:
입력: ransomNote = "a", magazine = "b"
출력: false
예 2:
입력: ransomNote = "aa", magazine = "ab"
출력: false
예시 3:
입력: ransomNote = "aa", magazine = "aab"
출력: true
제약:
- 1 <= ransomNote.length, magazine.length <= 10^5
- ransomNote, magazine영문 소문자로 구성됩니다 .
문제풀이
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map<Character, Integer> count = new HashMap<>();
for (char c : magazine.toCharArray()) {
count.merge(c, 1, Integer::sum);
}
for (char c : ransomNote.toCharArray()) {
if (!count.containsKey(c) || count.get(c) == 0) {
return false;
}
count.merge(c, -1, Integer::sum);
}
return true;
}
}
문제를 보고 두개의 문자열의 문자가 몇개인지를 알 수 있다면 문제를 해결 할 수 있겠다고 판단하였습니다.
HashMap을 사용하여 magazine의 문자열을 순회하며 count에 문자가 얼마나 반복되는지 카운트를 담아두고
ransomNote의 문자열을 순회하며 !count.containsKey(c) 즉, 문자가 count에 존재하지 않거나
count.get(c) == 0 즉, 카운터의 문자를 모두 소진했을 경우 magazine의 문자로 ransomNote를 전부 구성할 수 없다고 판단
하여 false를 반환하고 그게 아니라면 count.merge()를 이용하여 count의 사용된 문자의 개수를 하나씩 줄여 나가도록 해서
해결하였습니다.
'알고리즘' 카테고리의 다른 글
[Binary Search] Find Minimum in Rotated Sorted Array (0) | 2023.09.04 |
---|---|
[Divide & Conquer]Sort List (0) | 2023.09.04 |
[Hash Table] Two Sum (0) | 2023.08.31 |
[Stack] Min Stack (0) | 2023.08.31 |
[Binary Search] Search Insert Position (0) | 2023.08.28 |