Skip to content

Commit b94aa56

Browse files
feat: group-anagrams
1 parent 4e124bc commit b94aa56

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {string[]} strs
3+
* @return {string[][]}
4+
*/
5+
var groupAnagrams = function(strs) {
6+
const strsMap = new Map();
7+
for(let str of strs){
8+
const strArr = str.split('').sort()
9+
const keyName = strArr.join('-')
10+
strsMap.set(keyName,[...(strsMap.get(keyName)
11+
||[]),str])
12+
}
13+
return Array.from(strsMap.values())
14+
};
15+
16+
//시간복잡도 : O(n * klogk)
17+
// 공간복잡도 :O(n · k)
18+
19+
//2.문자 빈도수 기반 키 만들기
20+
// 알파벳이 26뿐이므로 각 단어마다 알파벳 개수를 세서 카운트배열 만들어 이걸 키로 사용
21+
var groupAnagrams = function(strs) {
22+
const map = new Map();
23+
24+
for (let str of strs) {
25+
const count = new Array(26).fill(0);
26+
for (let char of str) {
27+
count[char.charCodeAt(0) - 97]++;
28+
}
29+
const key = count.join('#'); // 구분자 없으면 ["1","11"]과 ["11","1"] 같은 키로 오해 가능
30+
map.set(key, [...(map.get(key) || []), str]);
31+
}
32+
33+
return Array.from(map.values());
34+
};
35+
36+
//시간복잡도 : O(n * k). 정렬이 없으므로
37+
// 공간복잡도: O(n · k)

0 commit comments

Comments
 (0)