【leetcode】49.字母异位词分组

76 阅读1分钟

leetcode-49.png

题目简述:将相同组合的单词放在一起,并返回。ateeat 就是相同组合的单词。

这一题采用的思路就是使用map来存放数据,首先遍历整个数组,将单词处理后,然后处理后的单词作为key,未处理的作为塞入到value数组之中
这一题的技巧就在于,sort的这个使用,字符数组直接调用sort便可以进行排序。

var groupAnagrams = function (strs) {
    let hash = new Map()
    let res = []
    for (let s of strs) {
        let tmp = s.split('').sort().toString()
        // 存在则到 value 数组中塞入进去
        if (hash.has(tmp)) {
            let arr = hash.get(tmp)
            // 用数组来存放,后续可以去除结果
            arr.push(s)
            hash.set(tmp, arr)
        } else {
            // 不存在则新建数组作为 value
            hash.set(tmp, [s])
        }
    }
    for (let [key, value] of hash) {
        res.push(value)
    }
    return res
};

下面是chatgpt的解法,比较优雅,显得我的代码太臃肿了

var groupAnagrams = function(strs) {
    let map = new Map();
    for (let str of strs) {
        // 将字符串排序
        let sortedStr = str.split('').sort().join('');
        // 如果排序后的字符串不在 map 中,创建一个新的数组
        if (!map.has(sortedStr)) {
            map.set(sortedStr, []);
        }
        // 将原字符串添加到对应的数组中
        // 这里因为对数组是引用,所以不必要像上面那种取出,然后塞入的操作
        map.get(sortedStr).push(str);
    }
    // 返回所有字母异位词组
    // 取出map中的所有 value 直接使用 map.values()
    // 然后转成数组使用 Array.from()
    return Array.from(map.values());
};

这一题没有过多的技巧,全部都是对js里面方法的熟悉程度

// map里面的value取值
map.values()
// 取key 使用
map.keys()

最后一点就是chatgpt解法的第12行,这里可以简洁代码