0
点赞
收藏
分享

微信扫一扫

LeetCode49.字母异位分组

秀儿2020 2022-01-10 阅读 30

LeetCode49.字母异位分组


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

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

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

示例 2:

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

示例 3:

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

解题思路
通过题目描述不难发现,分为一组的单词其组成的字母一样,只是其位置不同,既然如此,我们只需要将它们的顺序调成一样的,那么就可以很容易分组,在这里我们通过排序,可以将它们的顺序调成一样,调成一样后有多种做法,可以比较字符串是否一致,来做,但是这样多次循环。
这里,可以通过JavaScript中的集合来做,通过建立一个map集合,将排序后的字符串作为键,原字符作为值,最后然后分组后的结果。
代码实现

var groupAnagrams = function(strs) {
    let map = new Map();
    strs.forEach((str) => {
        const key = str.split("").sort().join("");
        map.has(key) ? map.get(key).push(str) : map.set(key, [str]);
    });
    console.log(map)
    return Array.from(map.values());
};

代码分析
由于使用的很多的内置函数,这个代码看起来十分的简短。
我们来分析一下这个代码的实现过程吧
通过forEach遍历每一个元素
split方法将数组中的每一个字符串分隔成单个字符,返回的是一个数组。
sort是排序函数,它通过ASCII码值排序
join是将它转化成字符串,相当于split的逆操作
最后通过三目运算符将排序后的字符串最为键,如果map中存在这个键了,那就说明它是一个组的,如果不存在,就将原字符串以数组的形式作为值存入map中。

from() 方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组。也就是说它将map里面的值作为数组元素,并返回这个值。

举报

相关推荐

0 条评论