49.字母异位词分组
/*** @param {string[]} strs* @return {string[][]}*/
var groupAnagrams = function(strs) {const map = new Object;for(let str of strs){let arr = new Array(26).fill(0);for(let s of str){arr[s.charCodeAt() - 'a'.charCodeAt()]++;}//数组直接作为对象的键时会被转换为字符串形式(例如,数组 [1,2,3] 被转换为字符串 "1,2,3"),//这允许我们将拥有相同字符频率统计的字符串分组到同一个数组中。map[arr] ? map[arr].push(str) : map[arr] = [str];}//Object.values(map) 从对象 map 中获取所有的值(即分组好的字符串数组)return Object.values(map);
};
在这行代码 map[count] ? map[count].push(s) : map[count] = [s];
中,使用push(s)
而非push([s])
的原因在于我们希望直接将字符串 s
添加到数组中,而不是添加一个包含字符串 s
的新数组。
map[count]
是一个数组,用来存储所有具有相同字符频率统计的字符串。如果用 push([s])
,则每个字符串都会被封装成一个独立的数组再被添加到 map[count]
中,这会导致 map[count]
成为一个数组的数组(例如,[['str1'], ['str2'], ...]
),这不符合题目的要求。题目要求的输出是将所有相同频率的字符串直接存储在同一个数组中(例如,['str1', 'str2', ...]
)。