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