重庆品牌服装网站建设大发快三网站自做
字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
输入:字符串数组strs
输出:二维列表
思路:计数法,使用有效的字母异位词对每一个字符串进行操作,得到
的整型数组进行比较,如果相同则表示是字母异位词,然后将其整合在一起,使用hash表键值映射,详细请看Java数据结构—HashMap(哈希表及其基本操作)(含hashset)
class Solution {public List<List<String>> groupAnagrams(String[] strs) {//定义哈希表Map<String,List<String>> map = new HashMap<>();//循环strsfor(String str : strs){//定义长度为26的整型数组用来存储每个字符出现的次数int[] counts = new int[26];//遍历字符串for(char s : str.toCharArray()){counts[s - 'a']++;}//拼接字符串,作为哈希表的键StringBuilder sb = new StringBuilder();for(int i = 0;i < 26;i++){if(counts[i] != 0){sb.append((char)('a' + i)).append(counts[i]);}}//转换为StringString key = sb.toString();//这个还在循环里面List<String> list = map.getOrDefault(key,new ArrayList<>());list.add(str);//把键值对存入mapmap.put(key,list);}//返回所有的哈希表中的值return new ArrayList<>(map.values());}
}
这里不能直接使用
return map.values();
Line 30: error: incompatible types: Collection<List<String>> cannot be converted to List<List<String>>return map.values();
虽然 map.values() 返回的集合已经包含了所有值,但它是一个 Collection 类型,而不是 List 或 ArrayList。为了满足特定需求(如随机访问、封装性等),我们需要将其转换为 ArrayList。因此,代码中使用 new ArrayList<>(map.values())
是一种更安全、更灵活的做法。