自己独立想不出来,看了别人的代码理解一遍之后写下题解:
题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
题解
将每个字符串中的字符转换成ascii并排序,然后转换成字符串
建立哈希表,根据字符串去映射,key为ASCII排序后的字符串,value为每一个字符串
最后再把map中的值push到最后的arr中
代码:
var groupAnagrams = function(strs) {
const len = strs.length,
ans = new Map();
for (let i = 0; i < len; i++) {
let asc = strs[i]
.split("")
.map((c) => c.charCodeAt())
.sort()
.join();
if (ans.has(asc)) {
ans.get(asc).push(strs[i]);
} else {
ans.set(asc, [strs[i]]);
}
}
return Array.from(ans.values());
};