BE/algorithm
[LeetCode] 49. Group Anagrams
bandal-gom
2023. 1. 3. 13:44
문제 링크
https://leetcode.com/problems/group-anagrams/description/
Intuition
- 동일한 길이를 가지고 동일한 문자열 구성을 가져야 하는 anagram!
- 그럼 저번에 문제 풀이 했을 때 처럼 set을 사용해서 풀어볼까?
- 그런데 이 전 문제와 다르게 grouping 해야하는 문제니까 hash 를 써야할듯
Approach
- 단어가 3글자라고 주어진 input에서 3개 묶음의 단어가 다 있으리라고는 보장 X
- 있는 element를 기준으로 hash에 저장해서 확인해야함
- python에서 hash는? → dictionary!
- dict의 key 값은 정렬한 값으로 저장 → 모든 element가 정렬된 값을 기준으로 hasKey() operation을 해야하므로
- values() 는 strs의 element 리스트
- 각 strs의 element를 확인하고, sorted 된 결과값의
- key가 존재한다면 → 해당 values 에 추가
- 없다면 → 새로운 group 추가
Complexity
Time complexity:
- O(NlogN)
Space complexity:
Code
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
# create a dictionary for anagrams
# sort word and check if that word exist in a set (anagram dictionary)
# if yes, add, if not pass
anagrams = dict()
for str in strs:
word = "".join(sorted(str))
# if empty
if not anagrams:
anagrams[word] = [str]
else:
if word in anagrams:
anagrams[word].append(str)
else:
anagrams[word] = [str]
return anagrams.values()
python 초보의 사소한 실수: sorted(string) 하면 그대로 정렬된 string 값을 내어주는줄 알았다..array가 return 값일줄은..!
반응형