题目简述:将相同组合的单词放在一起,并返回。ate 和 eat 就是相同组合的单词。
这一题采用的思路就是使用map来存放数据,首先遍历整个数组,将单词处理后,然后处理后的单词作为key,未处理的作为塞入到value数组之中
这一题的技巧就在于,sort的这个使用,字符数组直接调用sort便可以进行排序。
var groupAnagrams = function (strs) {
let hash = new Map()
let res = []
for (let s of strs) {
let tmp = s.split('').sort().toString()
// 存在则到 value 数组中塞入进去
if (hash.has(tmp)) {
let arr = hash.get(tmp)
// 用数组来存放,后续可以去除结果
arr.push(s)
hash.set(tmp, arr)
} else {
// 不存在则新建数组作为 value
hash.set(tmp, [s])
}
}
for (let [key, value] of hash) {
res.push(value)
}
return res
};
下面是chatgpt的解法,比较优雅,显得我的代码太臃肿了
var groupAnagrams = function(strs) {
let map = new Map();
for (let str of strs) {
// 将字符串排序
let sortedStr = str.split('').sort().join('');
// 如果排序后的字符串不在 map 中,创建一个新的数组
if (!map.has(sortedStr)) {
map.set(sortedStr, []);
}
// 将原字符串添加到对应的数组中
// 这里因为对数组是引用,所以不必要像上面那种取出,然后塞入的操作
map.get(sortedStr).push(str);
}
// 返回所有字母异位词组
// 取出map中的所有 value 直接使用 map.values()
// 然后转成数组使用 Array.from()
return Array.from(map.values());
};
这一题没有过多的技巧,全部都是对js里面方法的熟悉程度
// map里面的value取值
map.values()
// 取key 使用
map.keys()
最后一点就是chatgpt解法的第12行,这里可以简洁代码