--- title: '49. Group Anagrams' description: Given an array of strings strs, group the anagrams together. You can return the answer in any order sidebar: label: 'Group Anagrams' badge: 'Medium' --- Array ### Example 1: - Input: `strs = ["eat","tea","tan","ate","nat","bat"]` - Output: `[["bat"],["nat","tan"],["ate","eat","tea"]]` - Explanation: There is no string in `strs` that can be rearranged to form `"bat"`. The strings `"nat"` and `"tan"` are anagrams as they can be rearranged to form each other. The strings `"ate"`, `"eat"`, and `"tea"` are anagrams as they can be rearranged to form each other. ### Example 2: - Input: `strs = [""]` - Output: `[[""]]` ### Example 3: - Input: `strs = ["a"]` - Output: `[["a"]]` ### Constraints: - `1 <= strs.length <= 10^4` - `0 <= strs[i].length <= 100` - `strs[i]` consists of lowercase English letters. ## Approach ```mermaid flowchart TD S(["groupAnagrams(strs)"]) --> K["sorted[i] = letters of strs[i], sorted — the anagram key"] K --> I["anagrams = {}"] I --> L{"more i in 0..n-1?"} L -- no --> E(["return Object.values(anagrams)"]) L -- yes --> Q{"anagrams has sorted[i]?"} Q -- no --> N["anagrams[sorted[i]] = [strs[i]]"] Q -- yes --> P["anagrams[sorted[i]].push(strs[i])"] N --> L P --> L ``` ## Solution ```js /** * @param {string[]} strs * @return {string[][]} */ var groupAnagrams = function(strs) { let sorted = strs.map(str => str.split("").sort().join("")); let anagrams = {}; for (let i = 0; i < strs.length; i++){ if(!anagrams[sorted[i]]){ anagrams[sorted[i]] = [strs[i]] }else{ anagrams[sorted[i]].push(strs[i]) } } return Object.values(anagrams); }; ``` ## Explanation