题目:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 1040 <= strs[i].length <= 100strs[i]仅包含小写字母
代码
class Solution2 {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> data = new HashMap<>();
for(String str : strs){
char[] chars = str.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
if(data.containsKey(key)){
data.get(key).add(str);
}else {
List<String> list = new ArrayList<>();
list.add(str);
data.put(key,list);
}
}
return new ArrayList<>(data.values());
}
}
代码解读:
这是一个 Java 语言编写的函数,其功能是将输入的字符串数组 strs 进行分组。分组的依据是字符串的字母组成,即字母组成相同的字符串被归为一组。
groupAnagrams函数首先创建一个HashMap对象data,用于存储分组后的结果。键是排序后的字符串,值是该字符串的所有原始字符串的列表。- 通过对
strs数组进行遍历,对于每个字符串str,先将其字符数组化,然后使用Arrays.sort方法对字符数组进行排序,得到一个新的字符串key。 - 若
key已经存在于data中,意味着之前已经有相同字母组成的字符串被添加过,直接将当前字符串str添加到对应的列表中。 - 若
key不在data中,则创建一个新的列表,将str添加进去,并将其作为键值对插入到data中。 - 遍历结束后,
data中的每个键值对表示了一组字母相同的字符串。最后,使用new ArrayList<>(data.values())将所有的值(即字符串列表)提取出来,返回一个包含了所有分组的字符串列表的列表。
总的来说,这段代码是一个分组算法的实现,通过排序后的字符串作为键,可以高效地对字符串数组进行分组。