문제
Given an array of strings strs, group the anagramsntogether.
You can return the answer in any order.
Example 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
Explanation:
There is no string in strs that can be rearranged to form "bat".
The strings "nat" and "tan" are anagrams as they can be rearranged to form each other.
The strings "ate", "eat", and "tea" are anagrams as they can be rearranged to form each other.
Example 2:
Input: strs = [""]
Output: [[""]]
Example 3:
Input: strs = ["a"]
Output: [["a"]]
Constraints:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] consists of lowercase English letters.
풀이
비교하기 쉽게 각 문자열을 뜯어서 알파벳순으로 정렬하여 sortedArr에 담는다
for (i = 0; i < strs.length; i++) {
sortedArr[i] = strs[i].split('').sort().join('');
}
그 이후에 문자끼리 비교해서 같으면 묶어서 처음 입력받은 문자를 result 배열에 넣는게 목표인데,
방식을 몰라서 여기서 부턴 답을 참고했다.
해결책 :
hash map 이용하기
답안
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function (strs) {
var sortedArr = []
var result = []
var map = new Map(); // 정렬된 문자열을 기준으로 그룹을 저장할 맵
for (i = 0; i < strs.length; i++) {
sortedArr[i] = strs[i].split('').sort().join('');
}
// 정렬된 문자열을 기준으로 그룹을 생성하여 result에 저장
for (i = 0; i < strs.length; i++) {
let key = sortedArr[i]; // 정렬된 문자열을 key로 사용
if (!map.has(key)) {
map.set(key, []); // key가 없으면 새 배열 생성
}
map.get(key).push(strs[i]); // 원래 문자열을 그룹에 추가
}
// 맵에 저장된 값들을 result 배열에 저장
result = Array.from(map.values());
return result;
};
'JavaScript > Leetcode' 카테고리의 다른 글
132 Pattern (Medium) (0) | 2024.10.23 |
---|---|
Trapping Rain Water (Hard) (5) | 2024.10.23 |
Container With Most Water (Medium) (0) | 2024.09.27 |
Longest Palindromic Substring (Medium) (1) | 2024.09.26 |
3Sum (Medium) (0) | 2024.09.26 |