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:
Approach1:
We know that two string are anagrams if their sorted strings are equal.
Iterate through the Strings of array
We sort each String that we encounter in the loop and use it as Key
Since the Keys consist of sorted Strings therefore all anagrams will share the same key.
Essentially, when collision occurs (When two strings are anagram), we add that String to that it's respective place in the map.
Finally, we return the values of the HahsMap as it contained all the anagrams grouped in groups.
Time: O(mklogk) Space: O(mk)
Approach2: Optimal
After completing our first-approach, we notice that we might be able to optimize our algorithm. Primarily due to the fact that we know that our Strings will only contain lower-case english letters. This subsequenly allows us to use Counting Sort which is an O(N)
sorting algorithm in lieu of Arrays.sort()
which is a nlogn
algorithm (quickSort).
Time: O(mk) Space: O(mk)
Approach3: Brute-force
When first presented with this problem, the below implementation is also an intuitive approach however the time complexity is exponential.
Time: O(mklogk2) Space: O(mk)
Last updated
Was this helpful?