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;
    }
}

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

相关推荐
小陈工2 分钟前
2026年3月22日技术资讯洞察:数据库优化进入预测时代,网络安全威胁全面升级
java·开发语言·数据库·python·安全·web安全·django
We་ct2 分钟前
LeetCode 74. 搜索二维矩阵:两种高效解题思路
前端·算法·leetcode·矩阵·typescript·二分查找
小胖java2 分钟前
养老院管理系统
java·spring boot
2401_894241923 分钟前
基于C++的反射机制探索
开发语言·c++·算法
爱丽_3 分钟前
synchronized到底锁的是什么:对象头 Mark Word、Monitor、锁升级与排查
java
cui_ruicheng5 分钟前
C++ 数据结构进阶:unordered_map 与 unordered_set源码分析与实现
数据结构·c++·算法·哈希算法
ywlovecjy8 分钟前
Tomcat下载,安装,配置终极版(2024)
java·tomcat
二进制person8 分钟前
JavaEE初阶 --JVM
java·java-ee
C蔡博士10 分钟前
最小生成树(MST)详解:定义、算法与核心性质
算法·贪心算法·图论·时间复杂度
北风toto12 分钟前
IDEA模块名字和文件夹名字不一样的解决方式
java·ide·intellij-idea