Skip to content

Commit 18032d4

Browse files
committed
feat: add 049
1 parent 8460596 commit 18032d4

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
|19|[Remove Nth Node From End of List][019]|Linked List, Two Pointers|
6666
|33|[Search in Rotated Sorted Array][033]|Arrays, Binary Search|
6767
|43|[Multiply Strings][043]|Math, String|
68+
|49|[Group Anagrams][049]|Hash Table, String|
6869
|554|[Brick Wall][554]|Hash Table|
6970

7071

@@ -127,6 +128,7 @@
127128
[019]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/019/README.md
128129
[033]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/033/README.md
129130
[043]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/043/README.md
131+
[049]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/049/README.md
130132
[554]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/554/README.md
131133

132134
[004]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/004/README.md

note/049/README.md

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# [Group Anagrams][title]
2+
3+
## Description
4+
5+
Given an array of strings, group anagrams together.
6+
7+
For example, given: `["eat", "tea", "tan", "ate", "nat", "bat"]`,
8+
Return:
9+
10+
```
11+
[
12+
["ate", "eat","tea"],
13+
["nat","tan"],
14+
["bat"]
15+
]
16+
```
17+
18+
**Note:** All inputs will be in lower-case.
19+
20+
**Tags:** Hash Table, String
21+
22+
23+
## 思路0
24+
25+
题意是给你一组字符串,让你把其中同位异构字符串分组,同位异构字符串就是组成字符串的字符都相同,但是字符放的位置可以不同。既然要分组,那么关键就是如何确定他们是同位异构字符串呢,想到的自然就是对其排序,排序之后他们就都是同一个字符串了,就可以归为一类了,代码如下所示。
26+
27+
```java
28+
class Solution {
29+
public List<List<String>> groupAnagrams(String[] strs) {
30+
if (strs == null || strs.length == 0) return Collections.emptyList();
31+
List<List<String>> list = new ArrayList<>();
32+
Map<String, Integer> hash = new HashMap<>();
33+
int i = 0;
34+
for (String str : strs) {
35+
char[] c = str.toCharArray();
36+
Arrays.sort(c);
37+
String sortStr = String.valueOf(c);
38+
if (!hash.containsKey(sortStr)) {
39+
hash.put(sortStr, i++);
40+
List<String> sub = new ArrayList<>();
41+
sub.add(str);
42+
list.add(sub);
43+
} else {
44+
list.get(hash.get(sortStr)).add(str);
45+
}
46+
}
47+
return list;
48+
}
49+
}
50+
```
51+
52+
53+
## 结语
54+
55+
如果你同我一样热爱数据结构、算法、LeetCode,可以关注我GitHub上的LeetCode题解:[awesome-java-leetcode][ajl]
56+
57+
58+
59+
[title]: https://leetcode.com/problems/group-anagrams
60+
[ajl]: https://github.com/Blankj/awesome-java-leetcode
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.blankj.medium._049;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
/**
11+
* <pre>
12+
* author: Blankj
13+
* blog : http://blankj.com
14+
* time : 2017/10/18
15+
* desc :
16+
* </pre>
17+
*/
18+
public class Solution {
19+
public List<List<String>> groupAnagrams(String[] strs) {
20+
if (strs == null || strs.length == 0) return Collections.emptyList();
21+
List<List<String>> list = new ArrayList<>();
22+
Map<String, Integer> hash = new HashMap<>();
23+
int i = 0;
24+
for (String str : strs) {
25+
char[] c = str.toCharArray();
26+
Arrays.sort(c);
27+
String sortStr = String.valueOf(c);
28+
if (!hash.containsKey(sortStr)) {
29+
hash.put(sortStr, i++);
30+
List<String> sub = new ArrayList<>();
31+
sub.add(str);
32+
list.add(sub);
33+
} else {
34+
list.get(hash.get(sortStr)).add(str);
35+
}
36+
}
37+
return list;
38+
}
39+
40+
public static void main(String[] args) {
41+
Solution solution = new Solution();
42+
System.out.println(solution.groupAnagrams(new String[]{"eat", "tea", "tan", "ate", "nat", "bat"}));
43+
}
44+
}

0 commit comments

Comments
 (0)