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

本文介绍了如何解决LeetCode的242.有效的字母异位词和767.重构字符串问题,通过使用JavaScript实现字母计数并利用Map进行分组,详细解析了解题思路和代码实现,帮助读者理解字母异位词的判断与异位词分组的方法。
摘要由CSDN通过智能技术生成

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

解题思路:

如果你对这题不熟悉,可以先做242. 有效的字母异位词,以及我的题解LeetCode题解:242. 有效的字母异位词,数组计数,JavaScript,详细注释

  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()];
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值