题目
题解一:排序+哈希表
思路:由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
核心api:
//将字符串转换为字符数组char[] ch = str.toCharArray(); //"eat"//将字符串数组排序Arrays.sort(ch); //"aet"//将排序好的字符数组转为字符串,作为map集合的keyString 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>>();//遍历strsfor(String str: strs){//将字符串转换为字符数组char[] ch = str.toCharArray(); //"eat"//将字符串数组排序Arrays.sort(ch); //"aet"//将排序好的字符数组转为字符串,作为map集合的keyString 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());}