力扣热题100之字母异位词分组

48 阅读1分钟

题目

先来看看题目 image.png

思路

异位词这类问题的关键在于,你如何迅速判断两个字符串是异位词,主要考察数据编码和哈希表的使用: 你是否可以找到一种编码方法,使得字母异位词的编码都相同?找到这种编码方式之后,就可以用一个哈希表存储编码相同的所有异位词,得到最终的答案。 有效的字母异位词 考察了异位词的编码问题,对字符串排序可以是一种编码方案,如果是异位词,排序后就变成一样的了,但是这样时间复杂度略高,且会修改原始数据。更好的编码方案是利用每个字符的出现次数进行编码,也就是下面的解法代码。

解法(js)

var groupAnagrams = function(strs) {
    let codeMap=new Map()
    for(let s of strs){
        let code=encode(s);
        if(!codeMap.has(code)){
            codeMap.set(code,[]);
        }
        codeMap.get(code).push(s)
    }

    let res=[]
    for(let group of codeMap.values()){
        res.push(group)
    }

    return res;


   
};
function encode(s){
        let count=new Array(26).fill(0);
        for(let c of s){
            let delta=c.charCodeAt()-'a'.charCodeAt()
            count[delta]++
        }
        return count.toString();
    }