https://leetcode.com/problems/group-anagrams/submissions/
Group Anagrams - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
핵심 아이디어
- 순서가 다른 문자열은 정렬하면 같은 문자열이 된다
복잡도
- 시간 복잡도: O(N * KlogK)
- 문자열 N개 * K길이 문자열 정렬 KlogK
- 공간 복잡도: O(N)
- anagrams hash map (이차원처럼 보이지만, 전체 개수는 N개이다)
설명
"문자열 배열을 받아 애너그램 단위로 그룹핑하라"
순서가 다른 문자열 애너그램은 정렬하면 같은 문자열이 된다는 것을 활용하여 이를 key로 사용한 hashMap에 문자열들을 리스트로 저장한다.
[...str]을 쓰면 str.split() 없이도 문자열이 배열로 바뀐다는 것을 배웠다.
코드 (Javascript)
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
const anagrams = strs.reduce((prevMap, str) => {
const key = [...str].sort().join("");
if(!prevMap.has(key)) {
prevMap.set(key, [str]);
return prevMap;
}
prevMap.set(key, [...prevMap.get(key), str]);
return prevMap;
}, new Map());
return [...anagrams.values()];
};
'Problem Solving' 카테고리의 다른 글
[LeetCode] 42. Trapping Rain Water - 스택 풀이 (Python) (0) | 2024.03.01 |
---|---|
[LeetCode] 5. Longest Palindromic Substring (JS) (0) | 2022.09.03 |
[LeetCode] 819. Most Common Word (JS) (0) | 2022.09.03 |
[LeetCode] 937. Reorder Data in Log Files (JS) (0) | 2022.09.03 |
[LeetCode] 344. Reverse String (JS) (0) | 2022.08.22 |