一、题目描述
1.题目内容
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
2.题目示例
输入:[“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
3.提示
所有输入均为小写字母。
不考虑答案输出的顺序。
二、思路
哈希表。
使用哈希表以实现在遍历数组的同时存储相应的单词,并且便于后续的查找。
三、数据结构资料
请参考笔者总结的有关于本题所需使用的数据结构资料:
Java HashMap
四、代码
class Solution
{
public List<List<String>> groupAnagrams(String[] strs)
{
List<List<String>> result = new ArrayList<List<String>>();
Map<String, List<String>> map = new HashMap<String, List<String>>();
for(String str : strs)
{
List<String> list = map.getOrDefault(sort(str), new ArrayList<String>());
list.add(str);
map.put(sort(str), list);
}
for(List<String> list : map.values())
{
result.add(list);
}
return result;
}
private String sort(String sort)
{
char[] arrayStr = sort.toCharArray();
Arrays.sort(arrayStr);
String sorted = new String(arrayStr);
return sorted;
}
}
五、复杂度分析
时间复杂度O(n)
空间复杂度O(n)
执行用时 | 时间击败比例 | 内存消耗 | 内存击败比例 |
---|---|---|---|
8ms | 89% | 42.1MB | 18% |