Leetcode刷题(第49题)——字母异位词分组

x33g5p2x  于2022-03-01 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(260)

一、题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

二、示例

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

示例二
输入: strs = [""]
输出: [[""]]

示例三
输入: strs = ["a"]
输出: [["a"]]

三、解题思路
由题目可知:本题可以对数组中的字符串进行划分,将所含字母相同的都划分到一起。那么问题是如何知道所含字母相同呢?如果我们将字符串都按照字符从小到大的顺序进行排列的话,此时我们就能区分哪些字符所含字母是相同的。说干就干,但是我们会发现字符串中并没有所谓的sort方法,但是我们知道数组存在呀,此时我们就可以将字符串转化为数组split(""),然后对其ascll进行升序排列,获取字符的ascll可以通过charCodeAt()来获取。到此顺序排好了,该如何保存数据呢?我们每一个相同的组合都对应着一个数组,此时我们可以使用Map数据结构,以排列好的字符串为key,以数组为value进行保存,最终再进行遍历map中的数组,将其放入一个数组中即可。
四、代码展示

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
    let result = []
    let map = new Map()
    for(let item of strs) {
        let res = item.split("").sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0)).join("")
        if(map.has(res)) {
            map.get(res).push(item)
        }else {
            map.set(res, [item])
        }
    }
    map.forEach(item => {
        result.push(item)
    })
    return result
};

五、结果

相关文章