题目
题解一:排序+哈希表
思路:由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
核心api:
//将字符串转换为字符数组
char[] ch = str.toCharArray(); //"eat"
//将字符串数组排序
Arrays.sort(ch); //"aet"
//将排序好的字符数组转为字符串,作为map集合的key
String key = new String(ch);
//若key存在map,则返回对应的list集合,若key不存在,则返回新建的list空集合
List<String> list = map.getOrDefault(key,new ArrayList());
//map.values()返回所有value,并且以list集合返回
return new ArrayList<List<String>>(map.values());
代码:
public List<List<String>> groupAnagrams(String[] strs) {
// 解法一 : 排序+哈希表
//key为排序后的字符串,value为字母异位词的字符串list集合
Map<String,List<String>> map = new HashMap<String,List<String>>();
//遍历strs
for(String str: strs){
//将字符串转换为字符数组
char[] ch = str.toCharArray(); //"eat"
//将字符串数组排序
Arrays.sort(ch); //"aet"
//将排序好的字符数组转为字符串,作为map集合的key
String key = new String(ch);
//若key存在map,则返回对应的list集合,若key不存在,则返回新建的list空集合
List<String> list = map.getOrDefault(key,new ArrayList());
//将排序前的字符串加入list集合
list.add(str);
//加入到map集合 key(字符串)---->value(字母异位词)
map.put(key,list);
}
//map.values()返回所有value,并且以list集合返回
return new ArrayList<List<String>>(map.values());
}