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

leetcode hot100-2

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

我的解法,是错误解法,只能通过 56 / 126 的测试用例

这个题就是想求,用到的所有字母一样,可以组成不同的字符串。将这样的字符串排成一个list。
我想的是肯定得把一个字符串拆开成一个一个字母才能和别的字符串比较。但是想简单了,比较的时候用的list的containsAll方法,也就是字符串包含另一个字符串中的所有字符。 其实是不行的,因为同一个字符出现多次的时候就能满足包含关系,但次数关系没有得到统计。我没通过的测试案例及错误代码。

[“ddddddddddg”,“dgggggggggg”]

class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List> list = new ArrayList<List>();for (int i = 0; i < strs.length; i++) {char[] splitStr = strs[i].toCharArray();List splitList = new ArrayList<String>();for (int j = 0; j < splitStr.length; j++) {splitList.add(splitStr[j]);}list.add(splitList);}List<List<String>> res = new ArrayList<List<String>>();int[] flag = new int[strs.length];for (int k = 0; k < list.size(); k++) {List<String> temp = new ArrayList<String>();if (flag[k] == 0) {temp.add(strs[k]);flag[k] = 1;}for (int g = k + 1; g < list.size(); g++) {if (list.get(k).containsAll(list.get(g)) && list.get(k).size() == list.get(g).size() && flag[g] == 0) {temp.add(strs[g]);flag[g] = 1;}}if (temp.size() != 0) {res.add(temp);}}return res;}
}

其实之前想过将每个字符串按字母映射成一个26个字母的数组来统计次数。然后满足条件的字母异位词的这种数组是相同的。但是总觉得这种题应该去用集合解,而且忘记了怎么从字母映射成数组下标的方法(用counts[str.charAt(i) - ‘a’]++)。。。也想过按单个字符排序之后的字符串是相同的,但是没想到怎么去排序(用Arrays.sort()),又觉得要把每个排序后的字符串存下来,然后去和后面每个排序后的字符串比。

官方解法
1.再次用到了使用Map来避免一次循环比较
2. List list = map.getOrDefault(key, new ArrayList()); 这句话的意思是如果这个key下存在value就返回value,如果不存在就new一个List。非常好的一种写法。
3. 两个需要学习的方法 char[] array = str.toCharArray();(注意返回值是char[]类型的,也可以用split()返回也是char[]) Arrays.sort(array);
4. 千万不能定义一个 List<List> res然后在循环中res.add(list);这样会导致能匹配上的词组多次输出。使用return new ArrayList<List>(map.values()); 也是一个技巧,map.values直接将List初始化了。


class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<String, List<String>>();for (String str : strs) {char[] array = str.toCharArray();Arrays.sort(array);String key = new String(array);List<String> list = map.getOrDefault(key, new ArrayList<String>());list.add(str);map.put(key, list);}return new ArrayList<List<String>>(map.values());}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/group-anagrams/solutions/520469/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • 15.题目:编号3228 小蓝和小桥的挑战
  • xlive.dll文件丢失了要怎么处理?快速修复xlive.dll的方法
  • ky10-server docker 离线安装包、离线安装
  • HeadFirst读书笔记
  • Blender中四种不同的几何体类型(网格、曲线、体积和实例 )
  • 喜迎乔迁,开启新章 ▏易我科技新办公区乔迁庆典隆重举行
  • Windows系统安装TortoiseSVN并结合内网穿透实现远程访问本地服务器——“cpolar内网穿透”
  • html2canvas + JsPDF.js 导出pdf分页时的问题
  • 使用Fragments(片段)提升你的Vue.js开发体验
  • 电路设计(27)——交通信号灯的multisim仿真
  • Lua速成(2)
  • python 中常用的热门库介绍
  • 如何用Python3自撰一个简单的后端框架
  • python自动化学习--3.8python操作EXCEL文件python日志收集处理
  • STM32F103学习笔记(七) PWR电源管理(原理篇)
  • 【5+】跨webview多页面 触发事件(二)
  • Idea+maven+scala构建包并在spark on yarn 运行
  • java中的hashCode
  • JSONP原理
  • python学习笔记 - ThreadLocal
  • SpringBoot 实战 (三) | 配置文件详解
  • vue.js框架原理浅析
  • 汉诺塔算法
  • 力扣(LeetCode)22
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • hi-nginx-1.3.4编译安装
  • (6)添加vue-cookie
  • (Forward) Music Player: From UI Proposal to Code
  • (JS基础)String 类型
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (第61天)多租户架构(CDB/PDB)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十一)图像的罗伯特梯度锐化
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (正则)提取页面里的img标签
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • *Django中的Ajax 纯js的书写样式1
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET面试题(二)
  • .NET微信公众号开发-2.0创建自定义菜单
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .Net小白的大学四年,内含面经
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [.net]官方水晶报表的使用以演示下载
  • [20170728]oracle保留字.txt
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Android Studio] 开发Java 程序