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


    49. 字母异位词分组

    一、题目

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

    示例

    输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
    输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
    
    • 1
    • 2

    提示:

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

    二、题解

    思路:

    1. 将原始字符串转化为有序字符串(字符串->数组split() -> 排序sort()->字符串join())
    2. 遍历字符串数组,并将字符串存入map中 (key:有序字符串,val:包含原始字符串的数组)
    /**
     * @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;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    优化

        const res = [];
        for (const [key,val] of strMap) {
            res.push(val);
        }
        return res;
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

     return Array.from(strMap.values());
    
    • 1

    三、补充

    数组和字符串的转换

    字符串–>数组 ('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 中每个元素的值,按插入顺序排列。

    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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    怎么维护自己的电脑?
    KDD '22 | 物理模型增强伪标记的 T 细胞受体-肽相互作用预测
    Day04 HTML标记
    图文并茂|彻底搞懂零拷贝(Zero-Copy)技术
    MySQL常用语句(CURD)
    Java NIO详解
    机械臂速成小指南(十七):直线规划
    SpringMVC中如何编写一个Controller呢?
    Java访问控制修饰符详解(public、 private、protected 和 friendly)
    windows 11部署wsl环境
  • 原文地址:https://blog.csdn.net/Y_soybean_milk/article/details/134457921