49.字母异位词分组(JS)

321 阅读1分钟

字母异位词分组

Category Difficulty Likes Dislikes
algorithms Medium (57.79%) 177 -
Tags

hash-table | string

Companies

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

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

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

1

很明显使用map做一个映射就可以了

主要是我们要思考映射逻辑

比如

最简单的我们把每个字符串排序

那么排序后的字符串作为key

/*
 * @lc app=leetcode.cn id=49 lang=javascript
 *
 * [49] 字母异位词分组
 */
/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function (strs) {
	let map = new Map()
	for (const str of strs) {
		let key = str.split('').sort().join()
		if (!map.has(key)) {
			map.set(key, [str])
		} else {
			map.get(key).push(str)
		}
	}
	return [...map.values()]
};

上面这种方法是建立在被排序的字符串比较短

如果字符串过长

我们就要换一做映射方式

比如使用字符串向量

这里就懒得写了