題目地址:
https://leetcode.com/problems/group-anagrams/
給定一個字符串數組,如果兩個字符串所含字母以及每個字母出現的次數相同,則視爲等價。要求返回所有等價類。
思路是將等價的字符串統一化爲一個代表元作爲哈希表的key,然後將等價的元素都放在key對應的value裏,最後再歸結返回。代碼如下:
import java.util.*;
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
for (String s : strs) {
char[] chars = s.toCharArray();
// 字符排序後的字符串就成了每個等價類的代表元
Arrays.sort(chars);
String cur = new String(chars);
map.putIfAbsent(cur, new ArrayList<>());
map.get(cur).add(s);
}
for (List<String> list : map.values()) {
res.add(list);
}
return res;
}
}
時間複雜度。