一、题目
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
点击查看原题
难度级别:中等
二、思路
1)hashmap+排序
本题也是需要善于使用数据结构,就可以快速解出
变位词的特征是字符出现次数相同的词,那么,所有变位词进行排序后组成的字符串是相等的(字符串内容相等,hashcode
也是相等的),可以利用这个原理使用hashmap
将变位词放在一起
三、代码
1)hashmap+排序
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
var map = new HashMap<String, List<String>>();
for (String str : strs) {
char[] cs = str.toCharArray();
Arrays.sort(cs);
String ts = String.valueOf(cs);
if (!map.containsKey(ts)) {
map.put(ts, new ArrayList<String>());
}
map.get(ts).add(str);
}
var ans = new ArrayList<List<String>>();
for (List<String> values : map.values()) {
ans.add(values);
}
return ans;
}
}
字符串最大长度为C
,时间复杂度为O(n*ClogC)
,空间复杂度为O(nC)