LeetCode 49. Group Anagrams
2020-06-25 20:03:38 # leetcode # core problems # medium

Problem

LeetCode 49. Group Anagrams

1. 题目简述

给出一组字符串(全部由小写字母组成),将由相同字母组成的字符串按组进行返回。例如:

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]

2. 算法思路

其实这道题是很直接的一道题,问题就在于统计anagram,如何才能判断两个字符串啊anagram。这里我们用一个很巧妙的hash方法,记录每个字符串组成字母的哈希值。如下:

hashtable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> result = new HashMap<>();

for (String str : strs){
char[] strArray = str.toCharArray();
char[] keyArray = new char[26];

for (char c : strArray) {
keyArray[c - 'a']++;
}

// 用一个字符串来表示一个特殊的hash key。
String key = String.valueOf(keyArray);

if (!result.containsKey(key)){
result.put(key, new ArrayList<String>());
}
result.get(key).add(str);
}

return new ArrayList<>(result.values());
}
}