给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
/**
* @param {string[]} strs
* @return {string[][]}
*/
/*
思路:
1、检查数组是否为空数组
2、遍历所有字符串,将字母的出现频率放到数组的对象的位置里(利用ascii码)
3、建立一个长度为26的数组,起始值为0
4、遍历数组,按照相同字母出现的频率进行分组归类(使用hashMap)
5、遍历map,将结果返回
*/
var groupAnagrams = function(strs) {
if(strs.length === 0){
return [];
}
const map = new Map();
for(let i = 0; i < strs.length; i++) {
// 对单个str进行分割然后排序,再连接起来
let str = strs[i].split('').sort().join()
// 判断map中是否存在这个str
if(map.has(str)) {
let temp = map.get(str)
temp.push(strs[i])
map.set(str, temp)
} else {
map.set(str, [strs[i]])
}
}
return [...map.values()].reverse();
};