JavaScript算法45- 字母异位词分组(leetCode:49middle)

49. 字母异位词分组

一、题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例

复制代码
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

二、题解

思路:

  1. 将原始字符串转化为有序字符串(字符串->数组split() -> 排序sort()->字符串join())
  2. 遍历字符串数组,并将字符串存入map中 (key:有序字符串,val:包含原始字符串的数组)
js 复制代码
/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
    const strMap = new Map( );
    strs.forEach(val => {
        const newStr = val.split('').sort().join('');
        if(strMap.has(newStr)){
            strMap.set(newStr,[...strMap.get(newStr),val]);
        }else{
            strMap.set(newStr,[val]);
        }
    })
    const res = [];
    for (const [key,val] of strMap) {
        res.push(val);
    }
    return res;
};

优化

js 复制代码
    const res = [];
    for (const [key,val] of strMap) {
        res.push(val);
    }
    return res;

利用map的values()方法,可以简化为

js 复制代码
 return Array.from(strMap.values());

三、补充

数组和字符串的转换

字符串-->数组 ('apple' -> ['a', 'p', 'p', 'l', 'e'])

  • str.split('')
  • Array.from(str)

数组 --> 字符串

  • arr.join() 默认逗号分隔 ['a', 'p', 'p', 'l', 'e'] -> 'a,p,p,l,e'
  • arr.join('') ['a', 'p', 'p', 'l', 'e'] -> 'apple'
  • arr.toString()默认逗号分隔 ['a', 'p', 'p', 'l', 'e'] -> 'a,p,p,l,e'

Map的 values()方法

Map 实例的 values() 方法返回一个新的 map 迭代器对象,该对象包含此 map 中每个元素的值,按插入顺序排列。

js 复制代码
const myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");

const mapIter = myMap.values();
console.log(mapIter.next().value); // "foo"
console.log(mapIter.next().value); // "bar"
console.log(mapIter.next().value); // "baz"

console.log(Array.from(myMap.values())); // ["foo", "bar", "baz"]
相关推荐
立志成为大牛的小牛7 分钟前
数据结构——十七、线索二叉树找前驱与后继(王道408)
数据结构·笔记·学习·程序人生·考研·算法
星空下的曙光9 分钟前
Node.js crypto模块所有 API 详解 + 常用 API + 使用场景
算法·node.js·哈希算法
im_AMBER1 小时前
Web 开发 27
前端·javascript·笔记·后端·学习·web
玩代码1 小时前
vue项目安装chromedriver超时解决办法
前端·javascript·vue.js
StarPrayers.2 小时前
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
前端·人工智能·python·算法·pycharm·启发式算法
爱吃橘的橘猫2 小时前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式
235162 小时前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
苏打水com3 小时前
JavaScript 面试题标准答案模板(对应前文核心考点)
javascript·面试
Wx-bishekaifayuan3 小时前
基于微信小程序的社区图书共享平台设计与实现 计算机毕业设计源码44991
javascript·vue.js·windows·mysql·pycharm·tomcat·php
DoraBigHead3 小时前
React 架构重生记:从递归地狱到时间切片
前端·javascript·react.js