React

49. Group Anagrams

Given an array of strings strs, group the anagrams together. You can return the answer in any order.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Example 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
Plain Text
복사
Example 2:
Input: strs = [""] Output: [[""]]
Plain Text
복사
Example 3:
Input: strs = ["a"] Output: [["a"]]
Plain Text
복사
Constraints:
1 <= strs.length <= 10^4
0 <= strs[i].length <= 100
strs[i] consists of lowercase English letters.

My solution

문자열 배열 strs 가 주어진다. 애너그램들을 그룹화해라. 어떤 순서로도 답을 리턴할 수 있다.
Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
JavaScript
복사
strs 의 각 요소들을 어딘가에 저장해둔다. 여기서 그 어딘가는 hash면 되겠다.
그냥 해당 요소를 키로 해서 저장하는 것이 아니라 일정한 순서로 재배열한 상태(eat ⇒ aet)로 키로 저장하면 애너그램일 경우 겹치게 될 것이다.
// hash object { "aet" : ["eat"], }
JavaScript
복사
따라서 그 요소(”tea”이면 재배열 시 aet)가 이미 키로 존재할 때(aet) 그 키가 가진 값(배열)에다가 그 요소를 추가한다.
// hash object { "aet" : ["eat", "tea"], }
JavaScript
복사
const hash = {}; for(let i : 0 ~ strs.length) const sortStr = strs[i].split('').sort().join(); if(hash[sortStr] !== undefined) hash[sortStr].push(strs[i]); else hash[sortStr] = [strs[i]]; return Object.values(hash);
JavaScript
복사
마지막에는 hash의 values만 꺼내다가 배열로 반환하면 된다. (요소 순서는 상관 없다. sort() 사용 안함)

Code

/** * @param {string[]} strs * @return {string[][]} */ const groupAnagrams = function (strs) { const hash = {}; for (let i = 0; i < strs.length; i++) { const sortStr = strs[i].split('').sort().join(''); if (hash[sortStr] !== undefined) hash[sortStr].push(strs[i]); else hash[sortStr] = [strs[i]]; } return Object.values(hash); }; describe('twoSum', () => { it('TC1', () => { expect( groupAnagrams(['eat', 'tea', 'tan', 'ate', 'nat', 'bat']) ).toStrictEqual([['bat'], ['nat', 'tan'], ['ate', 'eat', 'tea']]); }); it('TC2', () => { expect(groupAnagrams([''])).toStrictEqual([['']]); }); it('TC3', () => { expect(groupAnagrams(['a'])).toStrictEqual([['a']]); }); });
JavaScript
복사