给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。(力扣第39题)
示例 :
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:[[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
排序法:
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
// 每个字串排序后,用map存储
//键名是排序后的串,键值是这个串的所有异位串组成的数组
let map = new Map()
for(let str of strs){//遍历原数组的元素
let arr = Array.from(str)
let key = arr.sort().join() //需要排序转为数组,排完再转成串,作为key
let value = map.get(key) ? map.get(key) : new Array()
value.push(str)
map.set(key,value)
}
return Array.from(map.values())
};
计数法:
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
//计数法,仅有26个小写字母,出现字母频率相同的串也是异位词,也用hash存储起来
let map = new Object()
for(let str of strs){
let key = new Array(26).fill(0)
for(let s of str){
key[s.charCodeAt()-'a'.charCodeAt()]++
}
map[key] ? map[key].push(str) : map[key] = [str]
}
return Object.values(map)
}