Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
It’s all about hashing the words.
Sort each word to get the key.
/**
* @param {string[]} strs
* @return {string[][]}
*/
let groupAnagrams = function (strs) {
let result = {};
for (let i = 0; i < strs.length; i++) {
const hash = strs[i].split("").sort().join("");
result[hash] = result[hash] || [];
result[hash].push(strs[i]);
}
return Object.values(result);
};
Use the product of prime numbers to generate unique keys.
const prime = [
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,
];
/**
* @param {string[]} strs
* @return {string[][]}
*/
let groupAnagrams = function (strs) {
const result = {};
for (let i = 0; i < strs.length; i++) {
const word = strs[i];
let hash = 1;
for (let k = 0; k < word.length; k++) {
hash *= prime[word.charCodeAt(k) - 97];
}
result[hash] = result[hash] || [];
result[hash].push(word);
}
return Object.values(result);
};
☆: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:☆
☆: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:☆