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
.
ransomNote
, magazine
magazine
의 문자열을 조합하여 ransomNote
를 만들 수 있는가?magazine
의 특정 문자를 중복하여 사용할 수 없다.전략 1. Map 자료구조 사용
magazine
을 Map으로 만든 후에 ransomNote
의 문자로 '나온 횟수'를 1씩 차감하는 방법을 이용전략 2. Sorting
index
를 설정하여 ransomNote
의 모든 문자가 magazine
안에 있는지 확인 class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map<Character, Integer> countOfLetter = new HashMap<>();
for (int i = 0; i < magazine.length(); i++) {
char letter = magazine.charAt(i);
int count = countOfLetter.getOrDefault(letter, 0);
countOfLetter.put(letter, count + 1);
}
for (int i = 0 ; i < ransomNote.length(); i++) {
char letter = ransomNote.charAt(i);
int count = countOfLetter.getOrDefault(letter, 0);
if (count <= 0) {
return false;
}
countOfLetter.put(letter, count - 1);
}
return true;
}
}
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
char[] magazineArray = magazine.toCharArray();
char[] noteArray = ransomNote.toCharArray();
Arrays.sort(magazineArray);
Arrays.sort(noteArray);
int noteIndex = 0;
int magazineIndex = 0;
while (noteIndex < noteArray.length && magazineIndex < magazineArray.length) {
if (noteArray[noteIndex] < magazineArray[magazineIndex]) {
return false;
} else if (noteArray[noteIndex] == magazineArray[magazineIndex]) {
noteIndex++;
}
magazineIndex++;
}
return noteIndex == noteArray.length;
}
}
Map
을 사용하는 방법이 더 좋음Sorting
이 시간 성능이 더 잘 나오는 것은 제공되는 데이터의 길이가 그렇게 길지 않은 것으로 추정됨ransomNote.length
, magazine.length
<= 100,000Map
을 만들고 쓰는 데에 생각보다 비용이 많이 필요로 하는 것을 알 수 있었다.