10-LeetCode 热题 100 49. 字母异位词分组(一行一注释)

84 阅读1分钟

一、题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

  示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[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)
};