Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b4daf1d

Browse files
committed
feat: add solutions to leetcode problem: No.0451. Sort Characters By Frequency
1 parent 61a49b0 commit b4daf1d

File tree

4 files changed

+137
-6
lines changed

4 files changed

+137
-6
lines changed

‎solution/0400-0499/0451.Sort Characters By Frequency/README.md‎

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,27 +50,71 @@
5050
注意'A''a'被认为是两种不同的字符。
5151
</pre>
5252

53-
5453
## 解法
5554

5655
<!-- 这里可写通用的实现逻辑 -->
5756

57+
"计数器 + 桶"实现。其中,计数器统计字符串中每个字符出现的次数。而对于桶,第 i 个位置存放出现次数为 i 的所有字符。
58+
5859
<!-- tabs:start -->
5960

6061
### **Python3**
6162

6263
<!-- 这里可写当前语言的特殊实现逻辑 -->
6364

6465
```python
65-
66+
class Solution:
67+
def frequencySort(self, s: str) -> str:
68+
if not s or len(s) < 3:
69+
return s
70+
counter = collections.Counter(s)
71+
buckets = [[] for _ in range(len(s) + 1)]
72+
for c, count in counter.items():
73+
buckets[count].append(c)
74+
res = []
75+
for i in range(len(s), -1, -1):
76+
if buckets[i]:
77+
for c in buckets[i]:
78+
res.append(c * i)
79+
return ''.join(res)
6680
```
6781

6882
### **Java**
6983

7084
<!-- 这里可写当前语言的特殊实现逻辑 -->
7185

7286
```java
73-
87+
class Solution {
88+
public String frequencySort(String s) {
89+
if (s == null || s.length() < 3) {
90+
return s;
91+
}
92+
Map<Character, Integer> counter = new HashMap<>();
93+
for (int i = 0; i < s.length(); ++i) {
94+
counter.put(s.charAt(i), counter.getOrDefault(s.charAt(i), 0) + 1);
95+
}
96+
List<Character>[] buckets = new List[s.length() + 1];
97+
for (Map.Entry<Character, Integer> entry : counter.entrySet()) {
98+
char c = entry.getKey();
99+
int count = entry.getValue();
100+
if (buckets[count] == null) {
101+
buckets[count] = new ArrayList<>();
102+
}
103+
buckets[count].add(c);
104+
}
105+
StringBuilder sb = new StringBuilder();
106+
for (int i = s.length(); i >= 0; --i) {
107+
if (buckets[i] != null) {
108+
for (char c : buckets[i]) {
109+
for (int j = 0; j < i; ++j) {
110+
sb.append(c);
111+
}
112+
}
113+
}
114+
}
115+
return sb.toString();
116+
}
117+
}
74118
```
75119

76120
### **...**

‎solution/0400-0499/0451.Sort Characters By Frequency/README_EN.md‎

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,63 @@ Note that &#39;A&#39; and &#39;a&#39; are treated as two different characters.
4242
<li><code>s</code> consists of English letters and digits.</li>
4343
</ul>
4444

45-
4645
## Solutions
4746

4847
<!-- tabs:start -->
4948

5049
### **Python3**
5150

5251
```python
53-
52+
class Solution:
53+
def frequencySort(self, s: str) -> str:
54+
if not s or len(s) < 3:
55+
return s
56+
counter = collections.Counter(s)
57+
buckets = [[] for _ in range(len(s) + 1)]
58+
for c, count in counter.items():
59+
buckets[count].append(c)
60+
res = []
61+
for i in range(len(s), -1, -1):
62+
if buckets[i]:
63+
for c in buckets[i]:
64+
res.append(c * i)
65+
return ''.join(res)
5466
```
5567

5668
### **Java**
5769

5870
```java
59-
71+
class Solution {
72+
public String frequencySort(String s) {
73+
if (s == null || s.length() < 3) {
74+
return s;
75+
}
76+
Map<Character, Integer> counter = new HashMap<>();
77+
for (int i = 0; i < s.length(); ++i) {
78+
counter.put(s.charAt(i), counter.getOrDefault(s.charAt(i), 0) + 1);
79+
}
80+
List<Character>[] buckets = new List[s.length() + 1];
81+
for (Map.Entry<Character, Integer> entry : counter.entrySet()) {
82+
char c = entry.getKey();
83+
int count = entry.getValue();
84+
if (buckets[count] == null) {
85+
buckets[count] = new ArrayList<>();
86+
}
87+
buckets[count].add(c);
88+
}
89+
StringBuilder sb = new StringBuilder();
90+
for (int i = s.length(); i >= 0; --i) {
91+
if (buckets[i] != null) {
92+
for (char c : buckets[i]) {
93+
for (int j = 0; j < i; ++j) {
94+
sb.append(c);
95+
}
96+
}
97+
}
98+
}
99+
return sb.toString();
100+
}
101+
}
60102
```
61103

62104
### **...**
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public String frequencySort(String s) {
3+
if (s == null || s.length() < 3) {
4+
return s;
5+
}
6+
Map<Character, Integer> counter = new HashMap<>();
7+
for (int i = 0; i < s.length(); ++i) {
8+
counter.put(s.charAt(i), counter.getOrDefault(s.charAt(i), 0) + 1);
9+
}
10+
List<Character>[] buckets = new List[s.length() + 1];
11+
for (Map.Entry<Character, Integer> entry : counter.entrySet()) {
12+
char c = entry.getKey();
13+
int count = entry.getValue();
14+
if (buckets[count] == null) {
15+
buckets[count] = new ArrayList<>();
16+
}
17+
buckets[count].add(c);
18+
}
19+
StringBuilder sb = new StringBuilder();
20+
for (int i = s.length(); i >= 0; --i) {
21+
if (buckets[i] != null) {
22+
for (char c : buckets[i]) {
23+
for (int j = 0; j < i; ++j) {
24+
sb.append(c);
25+
}
26+
}
27+
}
28+
}
29+
return sb.toString();
30+
}
31+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def frequencySort(self, s: str) -> str:
3+
if not s or len(s) < 3:
4+
return s
5+
counter = collections.Counter(s)
6+
buckets = [[] for _ in range(len(s) + 1)]
7+
for c, count in counter.items():
8+
buckets[count].append(c)
9+
res = []
10+
for i in range(len(s), -1, -1):
11+
if buckets[i]:
12+
for c in buckets[i]:
13+
res.append(c * i)
14+
return ''.join(res)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /