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:** Input: `strs = ["eat","tea","tan","ate","nat","bat"]` Output: `[["bat"],["nat","tan"],["ate","eat","tea"]]` **Example 2:** Input: `strs = [""]` Output: `[[""]]` **Example 3:** Input: `strs = ["a"]` Output: `[["a"]]`
Hash Map / Canonical Key
Two strings are anagrams if they have the same characters in the same frequencies. We can create a 'canonical key' for each string (either by sorting its letters or by counting character frequencies) and use this key to group the strings in a hash map.