Given an array of strings, group anagrams together.

**Example**:

Input: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]

Output:[ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]

**Note**:

- All inputs will be in lowercase.
- The order of your output does not matter.

## Solution

```
from typing import List
from collections import defaultdict
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
hashmap = defaultdict(list)
for aStr in strs:
hashmap[str(sorted(aStr))].append(aStr)
return list(hashmap.values())
```

## Test Cases

```
test = Solution()
answer = test.groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])
assert answer == [
["eat","tea","ate"],
["tan","nat"],
["bat"]
], answer
print('All Passed!')
```

## Big O Analysis

**Space Complexity**: O(NK)

**Time Complexity**: O(NK log K) where N is the length of the input array and K is the max length of words in the array