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

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

相关推荐
侠客行03176 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪6 小时前
深入浅出LangChain4J
java·langchain·llm
老毛肚8 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
那个村的李富贵8 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
风流倜傥唐伯虎8 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
power 雀儿8 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码8 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚8 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
熬夜有啥好8 小时前
数据结构——哈希表
数据结构·散列表
你这个代码我看不懂9 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言