LeetCode 热题 HOT — 字母异位词分组
字母异位词分组
原题地址
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <=
10410^41040 <= strs[i].length <= 100
strs[i]
仅包含小写字母
思路分析
方法一
- 字母异位词排序后,所得到的的字符串一定是相同的;
- 因此,我们可以使用排序后的字符串作为
key
值,然后将所存在的字母异位词组成数组当作对应key
值的value
值; - 定义一个字符串排序方法
sortString
,此处使用的是先将字符串转换成数组,然后数组排序,最后再组合成字符串的方式; - 定义一个空对象
map
,使用sortString(item)
后的值作为key
,若存在则将item
push
到数组中,若不存在,则使用item
,构建一个数组去赋值; - 最后返回
Object.values(map)
即可。
方法二
- 字母异位词中每个字母出现的次数一定是相同的;
- 因此,我们可以使用每个字母统计次数后的数据作为 key 值,然后将所存在的字母异位词组成数组当作对应
key
值的value
值; - 因为只含有小写字母,所以可以定义一个长度为26的字符串来统计每个字母出现的次数,然后将对应的字符串存入map中;
- 最后返回
Object.values(map)
即可。
AC 代码
方法一
/*** @param {string[]} strs* @return {string[][]}*/
var groupAnagrams = function(strs) {const map = { }strs.forEach(item => {if(map[sortString(item)]) {map[sortString(item)].push(item)} else {map[sortString(item)] = [item]}})return Object.values(map)
};var sortString = function(str) {return str.split('').sort().join('')
}
结果:
- 执行结果: 通过
- 执行用时:132 ms, 在所有 JavaScript 提交中击败了27.20%的用户
- 内存消耗:51.5 MB, 在所有 JavaScript 提交中击败了38.50%的用户
- 通过测试用例:115 / 115
方法二
/*** @param {string[]} strs* @return {string[][]}*/
var groupAnagrams = function(strs) {const map = {}strs.forEach(item => {const count = new Array(26).fill(0)for (let c of item) {count[c.charCodeAt() - 'a'.charCodeAt()]++}if(map[count]) {map[count].push(item)} else {map[count] = [item]}})return Object.values(map)
};
结果:
- 执行结果: 通过
- 执行用时:144 ms, 在所有 JavaScript 提交中击败了17.48%的用户
- 内存消耗:51.7 MB, 在所有 JavaScript 提交中击败了33.16%的用户
- 通过测试用例:115 / 115
END
LeetCode 热题 HOT — 字母异位词分组相关推荐
- leetcode力扣49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- 【LeetCode笔记】49. 字母异位词分组(Java、字符串、哈希表)
文章目录 题目描述 代码 & 思路 题目描述 考虑:如何把字母相同.排列不同的字符串组合成一个相同的.独一无二的东西? 尝试1:使用ascii的和(不行,虽然说确实相同,但是独一无二不满足) ...
- Leetcode刷题100天—49. 字母异位词分组( 排序)—day37
前言: 作者:神的孩子在歌唱 大家好,我叫运智 49. 字母异位词分组 难度中等847收藏分享切换为英文接收动态反馈 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. ...
- 模拟卷Leetcode【普通】049. 字母异位词分组
049. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示 ...
- LeetCode 49字母异位词分组50pow(x,n)51八皇后
原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...
- 【LeetCode】【HOT】49. 字母异位词分组(递归)
[LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...
- leetcode之字母异位词分组
题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. 示例 1: 输 ...
- leetcode 49. 字母异位词分组
49. 字母异位词分组 - 力扣(LeetCode) 一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词. 一开始算 ...
- Leetcode 字母异位词分组
字母异位词分组 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 说明: 所有输入均为小写字母. 不考虑答案输出的顺序. 题目链接 class Sol ...
最新文章
- 在CMD窗口连接到Mysql
- 消控中心人员配置_建筑能耗监测系统集中化运行管理模式和人员配置!
- bat 启动 不弹出对话框_CAD中转换出的PDF文件模糊要怎么办
- linux系统命令行基础知识点
- mysql管理应用_如何在PHP和MySQL中制作出色的库存管理应用程序
- 【SDK】Memory read error at 0xF8007080
- 无缝的缓存读取:双存储缓存策略
- php pdo效率,php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
- Git:git stash存储文件修改
- Vagrant 与 VirtualBox 的保姆级安装教程
- Windows系统(tips)
- Java根据信用卡号区分国际常用的五大信用卡卡种:VISA,Master,AE,DC,JCB.
- 深入理解Amazon Alexa Skill(四)
- matlab has encountered,[万能解决问题]MATLAB has encountered an internal problem and needs to close....
- HTML结构及常用的标签
- 本周AI热点回顾:百度推出全球首个mRNA疫苗不稳定性解决方案、性能提升20倍:英伟达GPU旗舰A100
- c语言程序由什么开头和结尾,一个完整的C程序由什么组成?
- FX3U控制松下服务器位置不准,三菱FX3UPLC如何控制松下伺服_.docx
- python股票基本面分析_股票基本面分析
- Linux onvif协议实现二(C语言客户端)