【LeetCode刷题记录】2. 字母异位词分组

59 阅读1分钟

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

 

示例 1:

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

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

/*方法一*/
/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function (strs) {
    let map = new Map()
    strs.forEach((v,index)=>{
        let a = [...v].sort().join('')
        if(map.has(a)){
           map.get(a).push(v)
        }else{
           map.set(a,[v])
        }
    })
    return [...map.values()]
};
/*方法二*/
/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var valueMap = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: 6,
    g: 7,
    h: 8,
    i: 9,
    j: 10,
    k: 11,
    l: 12,
    m: 13,
    n: 14,
    o: 15,
    p: 16,
    q: 17,
    r: 18,
    s: 19,
    t: 20,
    u: 21,
    v: 22,
    w: 23,
    x: 24,
    y: 25,
    z: 26,
}
var groupAnagrams = function (strs) {
    let arr = []
    for (let i = 0; i < strs.length; i++) {
        let sum = strs[i].split('').reduce((a, b) => {
            a += valueMap[b]
            return a
        }, 0)
        arr.push(`${sum}`)
    }
    let map = new Map()
    arr.forEach((b,index) => {
        if (map.has(b)) {
            map.get(b).push(index)
        } else {
             map.set(b,[index])
        }
    })
    let arrs = []
    let kes = map.keys()
    map.forEach((v, key)=> {
        if (key == '0') {
            arrs.push([""])
        } else {
            let c = []
             v.forEach(i => {
                c.push(strs[i])
            })
            arrs.push(c)
        }
    })
    return arrs
};
groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])