「每日LeetCode」2022年12月8日

本文最后更新于:2023年3月19日 晚上

49.字母异位词分组

49.字母异位词分组

Category Difficulty Likes Dislikes
algorithms Medium (67.72%) 1328 -

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

示例 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] 仅包含小写字母

Discussion | Solution

思路

首先,它声明了一个名为 map 的对象,用来存储分组信息。然后,它遍历字符串数组中的每个字符串。对于每个字符串,它会将字符串中的每个字符按字母顺序排序,然后将排序后的字符串作为键值存储到 map 对象中。如果该键值对应的键已存在,则它会将该字符串添加到对应的分组中。否则,它会新建一个分组,并将该字符串添加到新分组中。
最后,它将 map 对象中的所有分组作为数组返回。
解题的要点在于将给定字符串数组中的所有字谜分在同一组。为了做到这一点,需要对每个字符串进行排序,然后将排序后的字符串作为键值存储到对象中,根据排序后的字符串来分组。例如,如果有两个字符串 “eat” 和 “tea”,它们在排序后都为 “aet”,因此它们属于同一组。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* @lc app=leetcode.cn id=49 lang=javascript
*
* [49] 字母异位词分组
*/

// @lc code=start
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function (strs) {
const map = {};
for (const str of strs) {
const sortStr = str.split("").sort().join("");
if (map[sortStr]) map[sortStr].push(str);
else map[sortStr] = [str];
}
return [...Object.values(map)];
};
// @lc code=end