Javascript每天一道算法题(二)——字母异位分组


前言

提示:你需要较为理解Map 对象的使用

Map 一个键值对的对象,任何值都可以作为键和值
Map.get 获取一个键的数据,如果没有返回undefined
Map.set 添加或更新一个键值的数据


1、问题

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

2、示例

示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]

3、解决方法

let strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
let groupAnagrams = function(strs) {
    
    
    let mapObj = new Map(); // 1:定义一个map类型的对象
    for (const key of strs) {
    
    
        let array = Array.from(key); // 2:获取数组里面的每一项的字符串进行拆分
        array.sort(); // 3:将数组里面根据字母进行排序
        let str = array.toString();  // 4: 将数组变为逗号隔开的字符串
        // 5:将排序后的新字符串的数据作为键
        // 5-1 如果有这个值,就获取这个键的值放到list数组中
        // 5-2 如果mapObj.get()的键找不到会返回undefind,就返回一个空数组
        let list = mapObj.get(str) ? mapObj.get(str) : [];
        console.log(list);
        list.push(key) // 6: 把原数据放到list中
        // 7: 将按顺序排序的作为键,将原数据作为值(值为排序键一样的数据)
        mapObj.set(str, list) 
    }
    console.log('最终数据', Array.from(mapObj.values())); // 8: 返回map数据中的迭代数据(遍历)
};
groupAnagrams(strs);

猜你喜欢

转载自blog.csdn.net/weixin_44784401/article/details/134464615