一、题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
二、示例
示例一
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例二
输入: strs = [""]
输出: [[""]]
示例三
输入: strs = ["a"]
输出: [["a"]]
三、解题思路
由题目可知:本题可以对数组中的字符串进行划分,将所含字母相同的都划分到一起。那么问题是如何知道所含字母相同呢?如果我们将字符串都按照字符从小到大的顺序进行排列的话,此时我们就能区分哪些字符所含字母是相同的。说干就干,但是我们会发现字符串中并没有所谓的sort
方法,但是我们知道数组存在呀,此时我们就可以将字符串转化为数组split("")
,然后对其ascll
进行升序排列,获取字符的ascll
可以通过charCodeAt()
来获取。到此顺序排好了,该如何保存数据呢?我们每一个相同的组合都对应着一个数组,此时我们可以使用Map
数据结构,以排列好的字符串为key
,以数组为value
进行保存,最终再进行遍历map
中的数组,将其放入一个数组中即可。
四、代码展示
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
let result = []
let map = new Map()
for(let item of strs) {
let res = item.split("").sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0)).join("")
if(map.has(res)) {
map.get(res).push(item)
}else {
map.set(res, [item])
}
}
map.forEach(item => {
result.push(item)
})
return result
};
五、结果
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123201111
内容来源于网络,如有侵权,请联系作者删除!