leetcode-49-Group-Anagrams

描述


Given an array of strings, group anagrams together.

Example:

1
2
3
4
5
6
7
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

分析


因为给定的是 String 的列表,首先将每个 String 转换为 char[] 类型,进行排序,存入 HashMap 中,key 是排序后的 String,value 存原始的 String,对于具有 anagrams 结构的单词,排序后的结果是相同的,所以最后将 HashMap 中的 value 值一个个放入列表中返回即可。

解决方案1(Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> result = new ArrayList<List<String>>();
HashMap<String, ArrayList<String>> sortUnSortWordMap = new HashMap<String, ArrayList<String>>();
for (int i = 0; i < strs.length; i++) {
String current = strs[i];
char[] currentCharArray = current.toCharArray();
Arrays.sort(currentCharArray);
String sortedString = new String(currentCharArray);
if (!sortUnSortWordMap.containsKey(sortedString)) {
sortUnSortWordMap.put(sortedString, new ArrayList<String>());
}
sortUnSortWordMap.get(sortedString).add(current);
}

for (String key: sortUnSortWordMap.keySet()) {
result.add(sortUnSortWordMap.get(key));
}
return result;
}
}

相关问题


题目来源