原题链接:https://leetcode-cn.com/problems/group-anagrams/
解题思路:
如果你对这题不熟悉,可以先做242. 有效的字母异位词,以及我的题解LeetCode题解:242. 有效的字母异位词,数组计数,JavaScript,详细注释。
- 使用Map保存最终结果,Map中存储的是分组后的异位词数组。
- 使用长度为26的数组对每个字母计数,index值由char.codePointAt(0) - ‘a’.codePointAt(0)计算而来。
- 将计数后的数组转换成字符串,作为Map的key,存储相应的异位词字符串。
- 最后将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()];
};