字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
代码
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
for(String str : strs){
char[] array = str.toCharArray();
Arrays.sort(array);
String key = new String (array);
List<String> list = map.getOrDefault(key, new ArrayList<String>());
list.add(str);
map.put(key, list);
}
return new ArrayList<List<String>>(map.values());
笔记
首先,方法初始化了一个HashMap对象map,用于存储分组后的字符串列表,其中键为经过排序后的字符串,值为具有相同排序后字符串的原始字符串列表。
接下来,方法使用for-each循环遍历输入的字符串数组strs。
对于每个字符串str,方法首先将其转换为字符数组array。
然后,方法使用Arrays.sort()对字符数组array进行排序,以确保具有相同字母但顺序不同的字符串会被归类到同一个分组中。
接着,方法将排序后的字符数组array转换回字符串,并将其作为键key。
然后,方法使用map.getOrDefault()方法获取键为key的值,如果该键不存在,则创建一个新的空列表。
将原始字符串str添加到获取到的列表中。
最后,将更新后的值放回到map中。
完成对所有字符串的处理后,方法返回map.values(),即所有分组的列表,作为结果。
- Map<String, List>: 这部分指定了map变量的类型。它是一个键为字符串、值为字符串列表的映射(或者称为字典)。
- 在Java中,Map表示键值对的集合,而String表示字符串类型,List表示字符串的列表。
- List 是 Java 中的一种数据结构,它表示一个字符串类型的列表。在 Java 中,List 是一种接口,它表示一组按顺序排列的元素的集合。List 接口的实现类有很多,比如 ArrayList、LinkedList 等,它们提供了不同的操作方法,但都实现了相同的 List 接口。List 中的 表示这个列表中包含的元素类型是字符串类型。这意味着你可以向这个列表中添加字符串,并且在使用时,从列表中取出的元素都将是字符串。
- 在Java中,尖括号 <> 和圆括号 () 有不同的作用和含义。尖括号 <>:在泛型中,尖括号用于指定泛型的类型参数。例如,List 中的尖括号 指定了 List 中元素的类型是字符串类型。圆括号 ():在Java中,圆括号用于表示方法调用时的参数列表。例如,System.out.println(“Hello, world!”); 中的圆括号 (“Hello, world!”) 指定了 println 方法的参数。
- for (String str : strs)
这行代码是 Java 中的增强型 for 循环(也称为 for-each 循环),用于遍历数组或集合中的元素。
String str这部分声明了一个名为 str 的变量,它的类型是字符串(String)。这个变量用于在每次循环迭代中存储数组 strs 中的当前元素。
:这部分表示“在…中循环遍历”,即将会遍历数组 strs 中的所有元素。
strs这是一个字符串数组,即被遍历的对象。 - char[] array = str.toCharArray();
这行代码将字符串 str 转换为字符数组 array。
在 Java 中,String 类有一个名为 toCharArray() 的方法,用于将字符串转换为字符数组。该方法返回一个新的字符数组,其中包含了字符串中的所有字符,字符数组的长度等于字符串的长度,每个字符数组元素对应字符串中的一个字符。