首页 > 其他分享 >49. 字母异位词分组

49. 字母异位词分组

时间:2024-04-06 17:01:32浏览次数:19  
标签:map String 49 strs 异位 ArrayList 分组 str new

题干

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

 

示例 1:

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

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

 

提示:

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

 

思路1:直接模拟过程

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> res = new ArrayList<>();
        Set<Integer> skipSet = new HashSet<>();
        for(int i=0;i<strs.length;i++){
            if(skipSet.contains(i)){
                continue;
            }
            List<String> singleRes = new ArrayList<>();
            singleRes.add(strs[i]);
            Map<Character,Integer> count = new HashMap<>();
            for(int j=0;j<strs[i].length();j++){
                char c = strs[i].charAt(j);
                count.put(c,count.getOrDefault(c,0)+1);
            }
            if(i+1<strs.length){
                for(int j=i+1;j<strs.length;j++){
                    Map<Character,Integer> target = new HashMap<>();
                    for(int k=0; k<strs[j].length();k++){
                        char c = strs[j].charAt(k);
                        target.put(c, target.getOrDefault(c,0)+1);
                    }
                    if(count.equals(target)){
                        singleRes.add(strs[j]);
                        skipSet.add(j);
                    }
                }
            }
            res.add(singleRes);
        }
        return res;
    }
}

结果:

 提交之后发现问题:

 

思路2:字符串提前排序

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
//排序
        Map<String,List> map = new HashMap<String,List>();
        for(String s :strs){
            char[] arr = s.toCharArray();
            Arrays.sort(arr);
            String str = String.valueOf(arr);
            if(!map.containsKey(str)){
                map.put(str,new ArrayList());
            }
            map.get(str).add(s);
        }
        return new ArrayList(map.values());
    }
}

 

标签:map,String,49,strs,异位,ArrayList,分组,str,new
From: https://www.cnblogs.com/ak918xp/p/18117593

相关文章

  • P2495 [SDOI2011] 消耗战
    P2495[SDOI2011]消耗战虚树优化dp模板题考虑\(m=1\)。只需要简单的树形dp,设\(f_i\)表示\(i\)子树中的关键点都到不了\(i\)点的最小代价。转移枚举子节点\(v\),有:若\(v\)点为关键点,\(f_u=f_u+w(u,v)\)。否则,\(f_u=f_u+\min(f_v,w(u,v))\)。如果每次询问都跑一遍......
  • 【三十五】【算法分析与设计】综合练习(2),22。 括号生成,77。 组合,494。 目标和,模拟树递
    22.括号生成数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8【三十五】【算法分析与设计】综合练习(2),......
  • P4933 大师
    题目:链接:https://www.luogu.com.cn/problem/P4933这题本来的思路大体上是对的,就是根据已有的往后面推就行:以i号元素结尾,公差为j的等差数列的数量=遍历k∈[1,i-1],dp[k][j]+1的和。和这个大佬想的差不多,不过刚开始有点细节错误qAq噢对了,公差为负数那就加上一个NNN=2e4+5,这......
  • MySQL数据库分组查询group by
    1.DDL建表CREATETABLE`result`(`rid`int(11)NOTNULLAUTO_INCREMENTCOMMENT'成绩编号',`testName`varchar(255)DEFAULTNULLCOMMENT'测试名称',`score`double(4,2)DEFAULTNULLCOMMENT'成绩',`studentId`int(11)DEFAULTNUL......
  • Oracle分组查询中包含子查询列,发生ORA-00937:不是单分组函数的错误
    selectsum(raw_ore)raw_ore,(selectsum(raw_ore0)fromtrv_dailywherep_year=a.p_year)lift_orefromtrv_refineawherep_year=2024尽管语句selectsum(raw_ore0)fromtrv_dailywherep_year=a.p_year,只返回一个数值,系统提示“ORA-00937:不是单分组函数......
  • C112 莫队算法 P1494 [国家集训队] 小 Z 的袜子
    视频链接:  LuoguP1494[国家集训队]小Z的袜子//普通莫队O(n*sqrt(n))#include<iostream>#include<cstring>#include<algorithm>#include<cmath>usingnamespacestd;constintN=50005;intn,m,B,a[N];intsum,cnt[N],ans1[N],ans2[N];str......
  • 多表的联合查询以及分组排序与HAVING筛选
    DDL【创建数据库】——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAU......
  • 代码随想录第29天|491.递增子序列 46.全排列 47.全排列 II
    目录:491.递增子序列46.全排列47.全排列II 491.递增子序列491.非递减子序列-力扣(LeetCode)代码随想录(programmercarl.com)回溯算法精讲,树层去重与树枝去重|LeetCode:491.递增子序列_哔哩哔哩_bilibili给你一个整数数组 nums ,找出并返回所有该数组中不同的递......
  • BF548/BF547/BF549系列DSP的开发教程二十四:SPIFLASH的烧写
    作者的话BF54X系列DSP,是ADIBlackfin系列的4系列,在产品线做这个系列DSP的产品定义时,充分吸取了客户在BF53X上的痛点,把BF54X做成了外设最丰富的一类DSP,这个DSP曾经在车载视频,工控领域有不少的成功案例,OP作为2000年入坑的老鸟,自然也是用它做过很多项目。系列教程,说一说这个4......
  • 【leetcode】将x减到0的最小操作数/水果成篮/找到字符串中所有字母异位词{史上最容易
    文章目录1.将x减到0的最小操作数2.水果成篮3.找到字符串中所有字母异位词1.将x减到0的最小操作数分析题目x不断地减去数组两端的值看能否减到0;是不是就是在问:nums数组中存不存在【左端+右端】组成的连续区间,区间上数的和为x继续分析==》是不是就是在问:nums......