写点什么

LeetCode 题解:49. 字母异位词分组,数组计数 + 哈希表,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2020 年 10 月 05 日
LeetCode题解:49. 字母异位词分组,数组计数+哈希表,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/group-anagrams/


解题思路:


如果你对这题不熟悉,可以先做242. 有效的字母异位词,以及我的题解[LeetCode 题解:242. 有效的字母异位词,数组计数,JavaScript,详细注释](https://leetcode-cn.com/problems/valid-anagram/solution/leetcodeti-jie-242-you-xiao-de-zi-mu-yi-wei-ci-s-2/)


  1. 使用 Map 保存最终结果,Map 中存储的是分组后的异位词数组。

  2. 使用长度为 26 的数组对每个字母计数,index 值由 char.codePointAt(0) - 'a'.codePointAt(0)计算而来。

  3. 将计数后的数组转换成字符串,作为 Map 的 key,存储相应的异位词字符串。

  4. 最后将 Map 转换为数组形式输出结果即可。


/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function (strs) {
let resultMap = new Map(); // 使用Map保存结果
for (const str of strs) {
let keyArr = new Array(26).fill(0); // 使用数组统计所有字母的个数
for (const char of str) {
// 计算字母与a的码点差值,其差值会在0-25
const index = char.codePointAt(0) - 'a'.codePointAt(0);
// 每个字母的相应数量+1
keyArr[index]++;
}
// 将数组转换成字符串,用于保存相应异位词的结果
const key = JSON.stringify(keyArr);
// 将异位词按照对应的key存储到Map中
resultMap.get(key)
? resultMap.get(key).push(str)
: resultMap.set(key, [str]);
}
// 将Map转换为数组并输出结果
return [...resultMap.values()];
};
复制代码


发布于: 2020 年 10 月 05 日阅读数: 38
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:49. 字母异位词分组,数组计数+哈希表,JavaScript,详细注释