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

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

相关推荐
我是大猴子几秒前
一些八股和限流措施
java
拾饵9429 分钟前
面试回答整理(Q1–Q3)
leetcode
认真的小羽❅9 分钟前
ThreadLocal 在虚拟线程间要小心
java·开发语言·jvm
美味蛋炒饭.15 分钟前
Java八股面试(4)
java·开发语言·面试
SL_staff17 分钟前
OKR落地难?技术团队如何用五层联动链打通执行断层
java·开源·全栈
省钱兄--zs17 分钟前
无人自助拼豆系统架构设计与功能实现落地部署全流程实战指南
java·数据仓库·spring boot·系统架构·需求分析
Raas10018 分钟前
AI网关能做调用审计吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·服务器·网络·数据库·gateway·prompt·企业级产品
波力海苔夹心脆67519 分钟前
VisionPro 与 VisionMaster 对比(上):软件定位、开发环境与核心视觉工具对照
图像处理·算法·计算机视觉·c#·视觉检测·个人开发·vp9
动词ing22 分钟前
【题目练习】盛最多水的容器
算法·目标检测
海绵宝宝转agent23 分钟前
2026-10-14算法+面经总结
java·笔记·算法·缓存