给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]示例 2:
输入: strs = [""]
输出: [[""]]示例 3:
输入: strs = ["a"]
输出: [["a"]]提示:
1 <= strs.length <= 1040 <= strs[i].length <= 100strs[i] 仅包含小写字母排序法:
将给定数组的所有元素,按照 ASCII 顺序排列,这样,字母组成相同的元素排列完后,应该是同一个单词。
将其作为 key, 所在下标作为 value,存入 map 中,然后循环 map,将所有存起来的下标,在原数组中取出来即可。
const groupAnagrams = (strs) => {
const result = [];
const map = new Map();
for (let i = 0; i < strs.length; i++) {
const str = Array.from(strs[i]).sort().join(''); // 将 strs 中每个元素按照 ASCII 顺序排列,并再变回数组。
if (map.get(str)) { // 如果 map 中已经有变换后的 字符串,则在其 value 中 存入key
map.set(str, [...map.get(str), i])
} else {
map.set(str, [i])
}
}
map.forEach((value) => {
result.push(value.map((item) => strs[item]))
})
return result
}