mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
98 lines
3.4 KiB
Plaintext
98 lines
3.4 KiB
Plaintext
---
|
|
title: '49. Group Anagrams'
|
|
description: Given an array of strings strs, group the anagrams together. You can return the answer in any order
|
|
icon: dot
|
|
topics:
|
|
- { name: "Array", slug: "array" }
|
|
- { name: "Hash Table", slug: "hash-table" }
|
|
- { name: "String", slug: "string" }
|
|
- { name: "Sorting", slug: "sorting" }
|
|
video: "vzdNOK2oB2E"
|
|
issue: "https://github.com/prdlk/leetcode/issues/30"
|
|
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 }
|
|
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.
|
|
|
|
## 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);
|
|
};
|
|
```
|