2026-08-25 11:19:35 -04:00
---
title: '49. Group Anagrams'
description: Given an array of strings strs, group the anagrams together. You can return the answer in any order
2026-09-25 13:17:35 -04:00
icon: dot
2026-09-28 11:20:41 -04:00
topics:
- { name: "Array", slug: "array" }
- { name: "Hash Table", slug: "hash-table" }
- { name: "String", slug: "string" }
- { name: "Sorting", slug: "sorting" }
video: "vzdNOK2oB2E"
2026-09-30 18:00:32 -04:00
issue: "https://github.com/prdlk/leetcode/issues/30"
2026-10-14 15:52:02 -04:00
companies:
- { name: "Apple", period: "Thirty Days", frequency: 100 }
- { name: "Amazon", period: "Thirty Days", frequency: 78.4 }
- { name: "Ola Cabs", period: "Thirty Days", frequency: 76.7 }
- { name: "Bloomberg", period: "Thirty Days", frequency: 69.8 }
- { name: "tcs", period: "Thirty Days", frequency: 58.2 }
- { name: "Meta", period: "Thirty Days", frequency: 53.8 }
- { name: "Google", period: "Thirty Days", frequency: 50.2 }
- { name: "CrowdStrike", period: "Three Months", frequency: 100 }
- { name: "Deloitte", period: "Three Months", frequency: 100 }
- { name: "HashedIn", period: "Three Months", frequency: 100 }
- { name: "Smartsheet", period: "Three Months", frequency: 100 }
- { name: "Walmart Labs", period: "Three Months", frequency: 100 }
- { name: "Microsoft", period: "Three Months", frequency: 33.4 }
- { name: "Expedia", period: "Six Months", frequency: 100 }
- { name: "Wipro", period: "Six Months", frequency: 100 }
- { name: "Adobe", period: "Six Months", frequency: 93.7 }
- { name: "Zoho", period: "Six Months", frequency: 79.6 }
- { name: "Nvidia", period: "Six Months", frequency: 78.7 }
- { name: "Oracle", period: "Six Months", frequency: 78.7 }
- { name: "EPAM Systems", period: "Six Months", frequency: 76.2 }
- { name: "Palo Alto Networks", period: "Six Months", frequency: 75.9 }
- { name: "Visa", period: "Six Months", frequency: 69.7 }
- { name: "Infosys", period: "Six Months", frequency: 67.9 }
- { name: "Goldman Sachs", period: "Six Months", frequency: 53.1 }
2026-08-25 11:19:35 -04:00
sidebar:
label: 'Group Anagrams'
badge: 'Medium'
---
### 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.
2026-09-01 14:21:54 -04:00
## 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
```
2026-08-25 11:19:35 -04:00
## 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);
};
```