题目概述:给定一字符串数组。规定由相同字母构成的字符串为同一组,问该字符串数组最终分为几组,返回分完组后的一个二维数组
解题思路:由题意可得:如果两个字符串属于同一组,那么它们必定是由相同字符构成,即对该字符串进行排序后,两个字符串应该是相同的。因此,我们只需对每个字符串先进行排序处理,用map集合进行维护,查询集合中是否由该字符串对应的分组,如果有,直接将该字符串加入分组中;否则,创建一个新的分组。
知识点:创建二维数组,熟悉集合使用。
map.getOrDefault(Object key,V defaultvalue);
作用:如果map集合中存在key,则返回该key值对应的value;否则返回defaultvalue值。注意:defaultvalue的类型要和map定义时的类型一致或者兼容。可以替代if-else判断语句,减少代码量。
代码:
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
//用HashMap进行维护,父类接口引用子类对象
Map<String,List<String>>map = new HashMap<String,List<String>>();
for(int i = 0; i < strs.length; i ++){
//转换为字符数组,方便排序
char str[] = strs[i].toCharArray();
//调用数组排序方法
Arrays.sort(str);
String key = new String(str);
List<String> list = map.getOrDefault(key,new ArrayList<String>());
list.add(strs[i]);
//更新map
map.put(key,list);
}
//返回一个二维数组
return new ArrayList<List<String>>(map.values());
}
}
标签:map,数组,strs,异位,字母,分组,key,字符串,new
From: https://www.cnblogs.com/dengch/p/17795962.html