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
복사