一、题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 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]仅包含小写字母
解答+一行一注释
/**
* @param {string[]} strs
* @return {string[][]}
*/
// 该方法用于对于单词中的字符串排序
var sortWord = (a) =>{
// 将字符串分词转换为数组,然后排序,然后在拼接成字符串
// 比如:'ate' -> 'aet'
return a.split('').sort().join('')
}
var groupAnagrams = function(strs) {
// 用一个对象存储结果,key为排序后的单词,value为所有字母异位词数组
const map = {}
// 遍历字符串数组
for(let i = 0 ; i < strs.length; i ++){
// 获取当前单词
const curWord = strs[i]
// 对当前单词进行排序
const sortedWord = sortWord(curWord)
// 如果当前排序后的单词不存在
if(map[sortedWord] === undefined){
// key设置为排序后的单词,value构造一个数组
map[sortedWord] = []
// 当前当前单词push到该数组中
map[sortedWord].push(curWord)
}else{
// 如果当前排序后的单词存在,就直接将当前单词push到value数组中
map[sortedWord].push(curWord)
}
}
// 最后的结果就是这个对象的Object.values的结果(一个由map中所有value数组组成的二维数组)
return Object.values(map)
};