力扣刷题Days22-49.字母异位词(js)

目录

1,题目

2,代码

2.1利用数组排序作为键名

2.2计数实现

3,学习与总结


1,题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

2,代码

2.1利用数组排序作为键名

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
    const map = new Map();

    for(let str of strs){
        // 将字符串转换为数组
       let array = Array.from(str);
        //    利用数组排序
       array.sort();
        //    将排序后的数组转变为字符串
      const key = array.toString();
      let list = map.get(key)?map.get(key):new Array();
      list.push(str);
    //   字母异位词所用的单词为键名 字母异位字符串数组作为键值
      map.set(key,list);
    }
    return Array.from(map.values())
};

将数组转换为字符串可以使用 toString() 方法或 join() 方法。

toString()

  • 用法: 直接调用,不接受任何参数。
  • 行为: 将数组中的元素转换为字符串,并用逗号,分隔各元素。
  • 示例: ['apple', 'banana', 'cherry'].toString() 会返回 "apple,banana,cherry"
  • 特点:
    • 简单直接,不需要指定分隔符。
    • 不提供自定义分隔符的选项,只能使用默认的逗号分隔符。

join()

  • 用法: 调用时可以指定一个字符串作为分隔符。
  • 行为: 将数组中的所有元素转换为字符串,并使用指定的分隔符连接起来。如果没有指定分隔符,则默认使用逗号,
  • 示例:
    • ['apple', 'banana', 'cherry'].join() 会返回 "apple,banana,cherry",与 toString() 相同。
    • ['apple', 'banana', 'cherry'].join(' - ') 会返回 "apple - banana - cherry",这里使用了 ' - ' 作为分隔符。
  • 特点:
    • 提供了更灵活的选项,可以自定义分隔符。
    • 如果数组中某些元素是 undefinednull,这些值会被转换为空字符串。

将字符串转换为数组的常见方法包括 Array.from()string.split();

  • Array.from() 直接表示从一个可迭代对象(在这个例子中是字符串)创建一个新数组。它的意图非常直观——创建一个数组的副本。
  • str.split('') 通过将字符串分割成单独的字符来创建数组。虽然这里的分隔符是空字符串,意味着按每个字符分割,但其初衷是用于分割字符串,而非单纯地转换数据类型。

2.2计数实现

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
    const map = new Object();

    for(let str of strs){
        // 根据该题目题意 仅包含小写字母
        const count = new Array(26).fill(0);
        for(let c of str){
            count[c.charCodeAt() - 'a'.charCodeAt()]++;
        }
        map[count] ? map[count].push(str) : map[count] = [str];
    }
     return Object.values(map); 
};
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

则 map的结构如下:

{
  "1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0": ["eat", "tea", "ate"],
  "1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0": ["tan", "nat"],
  "1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0": ["bat"]
}

3,学习与总结

排序数组 练习对Map数据结构相关方法的使用;

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值