济南建设集团网站网站推广方法大全
异位词的题,都考虑计算 26 个字母出现的数量,然后进行比较,字母数量出现相同的一定是异位词。
- 外层循环循环字符串数组中的每一个字符串,在内层进行其他操作
- 内层首先计算字符串的 26 个字母的出现的数量,并用一个数组存储
- 将数组中不为 0 的代表的字符拼接在一起,作为哈希表的键
- put 操作
- 返回字符串数组,内容为哈希表的值
class Solution {public List<List<String>> groupAnagrams(String[] strs) {// 哈希表,存储最终的结果,其值就是结果Map<String, List<String>> map = new HashMap();// 遍历strsfor(String str : strs){// 创建数组记录str中每个字母的数量int[] counts = new int[26];for(int i = 0; i < str.length(); i++){counts[str.charAt(i) - 'a']++;}// 创建可变字符串保存counts中拼接后的字符串StringBuffer sb = new StringBuffer();for(int i = 0; i < 26; i++){if(counts[i] != 0){sb.append(i + 'a');sb.append(counts[i]);}}// 转换为普通的字符串String key = sb.toString();// 从 map 中获取指定 key 对应的 List<String>,如果 key 不存在,则返回一个新的空 ArrayList<String> 作为默认值。List<String> list = map.getOrDefault(key, new ArrayList<String>());list.add(str);map.put(key, list);}return new ArrayList<List<String>>(map.values());}
}