第一种解法
把字符先进行排序
var groupAnagrams = function(strs) {
const map=new Map();
var result=[];
for(const str of strs)
{
let a=str.split("")
a.sort(function(a,b){
//一定要把a,b转成ascii再进行计算
return a.charCodeAt()-b.charCodeAt();
});
console.log(a)
var key=a.join("")
if(map.has(key))
{
// map.set(key,map.get(key).push(str))
//push进数组
map.set(key,[...map.get(key),str]);
}
else
{
//注意这里用[str]是为了放进的形式为["21321","123123213"]
map.set(key,[str])
}
}
for(const arr of map)
{
result.push(arr[1]);
}
return result;
};
第二种方法给每个字母计算频率
var groupAnagrams = function(strs) {
const map=new Map();
var result=[];
for(const str of strs)
{
//组件一个长度为26都为0的数组
const characters=Array(26).fill(0)
for(let i=0;i<str.length;i++){
//字符ASCII码减去97就是其在数组中的索引
const ascii=str.charCodeAt(i)-97;
characters[ascii]++;
}
//把数组连接成字符串
const key=characters.join("");
console.log(key)
if(map.has(key))
{
map.set(key,[...map.get(key),str]);
}else{
map.set(key,[str]);
}
};
//对map数组进行遍历
for(const arr of map)
{
//arr[0]为其key值 arr[1]为其对应的值
result.push(arr[1])
}
return result;
}
这里会有个问题 [“bdddddddddd”,“bbbbbbbbbbc”]最后的key值是一样的
string b
b.charCodeAt() 转换成ascii码
map.set(key,[…map.get(key),str]);