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, magazinemagazine의 문자열을 조합하여 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을 만들고 쓰는 데에 생각보다 비용이 많이 필요로 하는 것을 알 수 있었다.