问题描述:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
- 所有输入均为小写字母。
- 不考虑答案输出的顺序。
解题思路:
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
代码实现:
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new LinkedList<List<String>>();
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
for(String str:strs){
char[] chars = str.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
//getOrDefault()只要满足获取的值不为空或者包含对应的key则不返回默认值,否则返回默认值new LinkedList<String>()
List<String> temp = map.getOrDefault(key, new LinkedList<String>());
temp.add(str);
//还需要将key和temp添加到map中,因为可能map中并没有这个key,上面提取的可能是默认值
map.put(key, temp);
}
//将map中的值放入res中
for(String key : map.keySet()){
res.add(map.get(key));
}
return res;
//也可以通过下面的方法将map中的值放入res中
// return new LinkedList<List<String>>(map.values());
}
提交结果: