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"]
相关推荐
呆呆的心4 分钟前
JavaScript 深入理解闭包与柯里化:从原理到实践 🚀
javascript·面试
快起来别睡了5 分钟前
看完这篇文章,你就知道什么是proxy
javascript
请你吃div6 分钟前
JavaScript 实用函数大全(超实用)
前端·javascript·面试
一个水瓶座程序猿.7 分钟前
Vue3 中使用 Vueuse
前端·javascript·vue.js
夏梦春蝉8 分钟前
ES6从入门到精通:Symbol与迭代器
前端·javascript·es6
今夜星辉灿烂10 分钟前
nestjs微服务-系列2
javascript·后端
Hilaku29 分钟前
用“人话”讲明白10个最常用的正则表达式
前端·javascript·正则表达式
2401_8812444035 分钟前
Treap树
数据结构·算法
乌萨奇也要立志学C++37 分钟前
二叉树OJ题(单值树、相同树、找子树、构建和遍历)
数据结构·算法
网安INF39 分钟前
深度学习中的逻辑回归:从原理到Python实现
人工智能·python·深度学习·算法·逻辑回归