mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
49 lines
1.5 KiB
Plaintext
49 lines
1.5 KiB
Plaintext
---
|
|||
|
|
title: '451. Sort Characters By Frequency'
|
||
|
|
description: Given a string s, sort it in decreasing order based on the frequency of the characters. The frequency of a character is the number of times it appears in the string
|
||
|
|
sidebar:
|
||
|
|
label: 'Sort Characters By Frequency'
|
||
|
|
badge: 'Medium'
|
||
|
|
---
|
||
|
|
|
||
|
|
<Badge variant="accent">Hash Table</Badge>
|
||
|
|
|
||
|
|
### Example 1:
|
||
|
|
- Input: `s = "tree"`
|
||
|
|
- Output: `"eert"`
|
||
|
|
- Explanation: `'e'` appears twice while `'r'` and `'t'` both appear once. So `'e'` must appear before both `'r'` and `'t'`. Therefore `"eetr"` is also a valid answer.
|
||
|
|
|
||
|
|
### Example 2:
|
||
|
|
- Input: `s = "cccaaa"`
|
||
|
|
- Output: `"aaaccc"`
|
||
|
|
- Explanation: Both `'c'` and `'a'` appear three times, so both `"cccaaa"` and `"aaaccc"` are valid answers. Note that `"cacaca"` is incorrect, as the same characters must be together.
|
||
|
|
|
||
|
|
### Example 3:
|
||
|
|
- Input: `s = "Aabb"`
|
||
|
|
- Output: `"bbAa"`
|
||
|
|
- Explanation: `"bbaA"` is also a valid answer, but `"Aabb"` is incorrect. Note that `'A'` and `'a'` are treated as two different characters.
|
||
|
|
|
||
|
|
### Constraints:
|
||
|
|
|
||
|
|
- `1 <= s.length <= 5 * 10^5`
|
||
|
|
- `s` consists of uppercase and lowercase English letters and digits.
|
||
|
|
|
||
|
|
## Solution
|
||
|
|
|
||
|
|
```js
|
||
|
|
/**
|
||
|
|
* @param {string} s
|
||
|
|
* @return {string}
|
||
|
|
*/
|
||
|
|
var frequencySort = function (s) {
|
||
|
|
// count the frequency of each character
|
||
|
|
const freq = {};
|
||
|
|
for (let c of s) freq[c] = (freq[c] || 0) + 1;
|
||
|
|
|
||
|
|
// sort the characters by frequency
|
||
|
|
return s
|
||
|
|
.split("")
|
||
|
|
.sort((a, b) => freq[b] - freq[a] || a.localeCompare(b))
|
||
|
|
.join("");
|
||
|
|
};
|
||
|
|
```
|