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

49. 字母异位词分组

一、题目

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

示例

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

提示:

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

二、题解

思路:

  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"]
相关推荐
luj_17682 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
不听话坏3 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
mCell3 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
小二·4 小时前
React 19 + Next.js 15 现代前端开发实战:App Router / Server Components / 流式渲染
前端·javascript·react.js
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17685 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I0815 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-6 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~6 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510306 小时前
【板子】ST表
c++·笔记·算法·板子