LeetCode热题100: 49.字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

输出:[["bat"],["nat","tan"],["ate","eat","tea"]]

解释:

  • 在 strs 中没有字符串可以通过重新排列来形成 "bat"
  • 字符串 "nat""tan" 是字母异位词,因为它们可以重新排列以形成彼此。
  • 字符串 "ate""eat""tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = [""]

输出:[[""]]

示例 3:

输入: strs = ["a"]

输出:[["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

老规矩,直接上代码,看不懂的请留言或私信我

java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> ans = new ArrayList<>();
        if(strs.length == 1) {
            ans.add(new ArrayList<>());
            ans.get(0).add(strs[0]);
            return ans;
        }
        Map<String, List<String>> map = new HashMap<>();
        /**如果大于1个遍历一下,遍历的过程中统计每个字母的词频,然后按照从a到z的顺序拼接,比如a出现两次拼接aa,都拼接完存入map以拼接完的string对应的list*/
        for(String str : strs) {
            char[] sArr = str.toCharArray();
            int[] count = new int[26];
            /**统计字符出现的频次 */
            for(char c : sArr) {
                count[c - 'a'] ++;
            }
            /**统计完之后拼接字符串*/
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < count.length; i++) {
                for(int j = 0; j < count[i]; j ++) {
                    sb.append((char)('a' + i));
                }
            }
            String strCur = sb.toString();
            /**拿到按a~z的顺序排序后对应的list,有就拿原来的,没有就建个新的*/
            List<String> strList = map.getOrDefault(strCur, new ArrayList<>());
            /**把当前单词加入 */
            strList.add(str);
            /**别忘了put,这是针对新建list的情况,如果不put的话map里就不存在 */
            map.put(strCur, strList);
        }
        /**map的values是我们的各个异位词的list */
        for(List<String> list : map.values()) {
            ans.add(list);
        }
        return ans;
    }
}

运行结果不是特别好,但是面试肯定过了,懒得优化了

相关推荐
雨中飘荡的记忆5 小时前
ElasticJob分布式调度从入门到实战
java·后端
灵感__idea8 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
考虑考虑14 小时前
JDK25模块导入声明
java·后端·java ee
_小马快跑_15 小时前
Java 的 8 大基本数据类型:为何是不可或缺的设计?
java
Wect18 小时前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
Re_zero18 小时前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记18 小时前
Spring Boot条件注解详解
java·spring boot
NAGNIP1 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
程序员清风1 天前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5512 天前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java