LeetCode49.字母异位分组

LeetCode49.字母异位分组


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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams

示例 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里面的值作为数组元素,并返回这个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一只合格的前端攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值