1.题目
给你一个字符串数组,请将这个数组按照 字母异位词 组合在一起。
字母异位词 是字母相同,但顺序不同的单词。如:ate 和eat(字母都为a、e、t,但排列顺序不同)
2.示例
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
3.个人解法
第二天,成功pdf,已经汗流浃背了……
4.官方解法
排序思想:将字符串数组中的字符串进行排序,因为不同排列顺序的字符串,将其排好序后,结果一定相同。将排好序的字符串作为key,将原字符串作为value放入哈希表中。以此实现分门别类
学习的点:HashMap、List、Arrarys、数据类型之间的转换手法
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
//声明一个key——value的结果集,如 {"str1":["value1","value2"]}
HashMap<String, ArrayList> result = new HashMap<>();
//遍历字符串数组
for(String s : strs){
char[] temp = s.toCharArray(); //将字符串转为字符数组
Arrays.sort(temp); //转换的目的 :调用数组的排序方法
String key = new String(temp); //将排完序的字符数组再转换回字符串
if(!result.containsKey(key)){
result.put(key,new ArrayList<>()); //放入键和空值
}
result.get(key).add(s); //将原值添加到value中
}
return new ArrayList(result.values()); //其value为最后的结果
}
}

参与讨论
(Participate in the discussion)
参与讨论