LeetCode Note Java 00049:Group Anagrams

將輸入的 string array strs 依 Anagram (由相同字母池組成的單字) 分組後返回。

題目

Group Anagrams Medium

Given an array of strings strs, group the anagrams together. You can return the answer in any order.

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, ArrayList<String>> hm = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
char[] sc = strs[i].toCharArray();
Arrays.sort(sc);
String key = new String(sc);
if (hm.containsKey(key)) {
hm.get(key).add(strs[i]);
} else {
ArrayList<String> al = new ArrayList<>();
al.add(strs[i]);
hm.put(key, al);
}
}
return new ArrayList<>(hm.values());
}
}

步驟:

  1. 之前 Valid Anagram 的方式 找出 Anagram。

  2. 將重新排序過的字串作為 HashMap 的 Key,來存放 Anagram Array。

  3. 最後回傳 HashMap 存放的 Arrays。

注意:

  • HashMap.values() 是個 Set 不能作為 List 型別回傳,所以要再用 ArrayList 包裝。

重點物件或方法:

  • HashMap

  • ArrayList

寫的時候會一直用錯 HashMap 跟 ArrayList 的泛型宣告,Collection 與 List 的關係也挺讓人混亂。要默寫出來需要對這些類別無比熟悉。

檢討

繞了一圈後發現這解法算是滿主流的,差在 code 的精簡度跟使用 List 的差異。

參考資料

Share my short JAVA solution

Java ArrayList

Java HashMap

Java HashMap values() 方法