当前位置: 首页 > news >正文

LeetCode变位词组

剑指 Offer II 033. 变位词组

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

注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。

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

来源:LeetCode

题目的关键点就在于统计每个字符出现的次数,可以将每个字符以及字符出现的次数作为map集合的key。
统计字母个数的时侯将元素中的每一个字母的个数记录在长度为26的int数组中,对于每个元素都要进行这个过程。

思路总结:
1.对于每一个strs中的字符串,在count数组中存储其每个字母的个数,故count数组应该大小为26.
2.将元素的每个字母以及其出现的次数进行拼接作为map集合的key,方便后续判断是不是变位词。
3.将具有相同key值的元素加入到list集合里面,此时要注意,如果是还没有对应的key值,那应该新建一个List;如果有相应的key值,就将当前字符串加入到list集合里面。
4.map集合的key就是上面的key,value就是对应的list集合的值,每次遍历一个strs中的元素都要更新一次
5.最后返回map集合中的value即可。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<String,List<String>>();
        for(String str:strs){
            int[] count = new int[26];
            int length = str.length();

            for(int i=0;i<length;i++){
                count[str.charAt(i)-'a']++;
            }

            StringBuffer s = new StringBuffer();
            for(int i=0;i<26;i++){
                if(count[i]!=0){
                    s.append('a'+i);
                    s.append(count[i]);
                }    
            }
            String key = s.toString();
            List<String> list = map.getOrDefault(key,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

getOrDefault(key,default)
作用:如果存在相应的key则返回其对应的value,否则返回给定的默认值。

相关文章:

  • locust压测实例
  • 8.6 轻量化网络设计概述
  • 【C#】萌狼学习C#那年写的笔记汇总
  • 20个js工具函数助力高效开发
  • 软件领域中面向对象的设计模式
  • 01用户登录,登出,token等框架说明
  • 几位阿里发布这份内部MySQL性能优化法则笔记
  • java-php-python-ssm巢院小区疫情管控系统计算机毕业设计
  • Linux基础 - 系统安全(SELinux与Firewalld)
  • 学完这份“顶级”SpringCloudAlibaba笔记,微服务竟如此简单
  • Spring注解驱动开发及源码解析
  • 2.1RDB、AOF及混合持久化详解Redis持久化
  • matlab基于PID反馈的主动隔振效果仿真分析
  • 力扣记录:Hot100(8)——253-322
  • 模板 cdq分治解三维偏序
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • AWS实战 - 利用IAM对S3做访问控制
  • flask接收请求并推入栈
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SegmentFault 2015 Top Rank
  • SpriteKit 技巧之添加背景图片
  • 初探 Vue 生命周期和钩子函数
  • 电商搜索引擎的架构设计和性能优化
  • 后端_MYSQL
  • 强力优化Rancher k8s中国区的使用体验
  • 树莓派 - 使用须知
  • 学习Vue.js的五个小例子
  • 由插件封装引出的一丢丢思考
  • 怎么把视频里的音乐提取出来
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​io --- 处理流的核心工具​
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​Linux·i2c驱动架构​
  • ​卜东波研究员:高观点下的少儿计算思维
  • #Z2294. 打印树的直径
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (ZT)薛涌:谈贫说富
  • (二)fiber的基本认识
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • **CI中自动类加载的用法总结
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Framework杂记
  • @Autowired标签与 @Resource标签 的区别
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [APUE]进程关系(下)
  • [autojs]autojs开关按钮的简单使用
  • [bzoj1038][ZJOI2008]瞭望塔
  • [c#基础]DataTable的Select方法
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [HDU 3555] Bomb [数位DP]
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页