var groupAnagrams = function (strs) { let len = strs.length; // 排序一下数组中每个字符串的顺序 let temp = []; for (let str of strs) { temp.push(str.split("").sort().join("")); } // 结果数组 let ans = []; for (let i = 0; i < len; i++) { // 为"0",说明已经遍历对比过了 if (temp[i] === "0") { continue; } let cur = []; // 先把当前的扔进去 cur.push(strs[i]); for (let j = i + 1; j < len; j++) { if (temp[i] === temp[j] && temp[i] != "0") { cur.push(strs[j]); // 标识为已对比 temp[j] = "0"; } } ans.push(cur); } return ans; };
最终代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var groupAnagrams = function (strs) { var h = newMap(), 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, ]; for (var i = 0; i < strs.length; i++) { let sum = 1; // 初始化乘法单位元,空字符串的最终sum为1," "最终为NaN(依然可以为key) for (var j = 0; j < strs[i].length; j++) { sum *= prime[strs[i].charCodeAt(j) - 97]; } h.has(sum) ? h.get(sum).push(strs[i]) : h.set(sum, [strs[i]]); } returnArray.from(h.values()); };