字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
输入:
[“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出:
[ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”] ]
哈希表
/**
* @param {string[]} strs
* @return {string[][]}
*/
var groupAnagrams = function(strs) {
if (!strs || !strs.length) return []
const map = {
};
for (let i of strs) {
let temp = [...i].sort().join();
if (!map[temp]) {
map[temp] = [i]
} else {
map[temp].push(i)
}
}
return Object.values(map)
};
/**
* @param {string[]} strs
* @return {string[][]}
* use `[charCodeAt() - 97]` to get unique index from the prime array
*/
var groupAnagrams = function (strs) {
if (!strs || !strs.length) return [];
const primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101];
const map = {
};
for (let str of strs) {
let prod = [...str].reduce((r, c) => r * primes[c.charCodeAt() - 97], 1);
map[prod] ? map[prod].push(str) : (map[prod] = [str]);
}
return Object.values(map);
};
var groupAnagrams = function (strs) {
let hash = new Map();
for (let str of strs) {
let arr = Array(26).fill(0);
for (let i = 0; i < str.length; i++) {
arr[str.charCodeAt(i) - 97]++;
}
let hashKey = arr.join();
if (hash.has(hashKey)) {
hash.set(hashKey, [...hash.get(hashKey), str]);
} else {
hash.set(hashKey, [str]);
}
}
return [...hash.values()];
};