【Leecode】Leecode刷题之路第49天之字母异位词分组

Scroll Down

题目出处

49-字母异位词分组-题目出处

题目描述

49-字母异位词分组-题目描述

个人解法

思路:

todo

代码示例:(Java)

todo

复杂度分析

todo

官方解法

49-字母异位词分组-官方解法

前言

49-字母异位词分组-官方解法-前言

方法1:排序

思路:

49-字母异位词分组-排序-思路

代码示例:(Java)

public class Solution1 {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
            char[] array = str.toCharArray();
            Arrays.sort(array);
            String key = new String(array);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }


}

复杂度分析

49-字母异位词分组-排序-复杂度分析

方法2:计数

思路:

49-字母异位词分组-计数-思路

代码示例:(Java)

public class Solution2 {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
            int[] counts = new int[26];
            int length = str.length();
            for (int i = 0; i < length; i++) {
                counts[str.charAt(i) - 'a']++;
            }
            // 将每个出现次数大于 0 的字母和出现次数按顺序拼接成字符串,作为哈希表的键
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < 26; i++) {
                if (counts[i] != 0) {
                    sb.append((char) ('a' + i));
                    sb.append(counts[i]);
                }
            }
            String key = sb.toString();
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }


}

复杂度分析

49-字母异位词分组-计数-复杂度分析

考察知识点

收获

Gitee源码位置

49-字母异位词分组-源码

同名文章,已同步发表于CSDN,个人网站,公众号