题目:
难度:Middle
相关话题:哈希表
、字符串
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
思路:
查看2个异位词最直接的办法就是排序,这里对每一个单词进行排序,再用hash
保存,发现相同的说明是异位词, 时间复杂度是O(NKlogK)
,其中N
是单词列表长度,K
是每个单词的长度。
另一种办法对每一个单词构建一个26
位数组,里面存放每一个字母在当前单词中出现的次数,
例如:aabcab
,对应的数组就是[3,2,1,0,0,0,...]
序列化该数组后,保存到hash
,发现相同的说明就是异位词。
第二种方法时间复杂度是O(NK)
。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
let collect={},result=[]
for(let i=0;i<strs.length;i++){
let sorted=strs[i].split('').sort().join('')
if(!collect[sorted])collect[sorted]=[strs[i]]
else collect[sorted].push(strs[i])
}
for(let k in collect){
result.push(collect[k])
}
return result
};