给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一
解题思路:使用哈希表,同样的字母组合有同样的键如何找到相同的键有两个思路,1:记录每个字母出现的次数;2:把字母排序。
一:字母排序
function groupAnagrams(strs) {
const map = {}; // 创建一个哈希表
for (let str of strs) {
// 将字符串排序后作为键
const sortedStr = str.split('').sort().join('');
// 如果键不存在,初始化为空数组
if (!map[sortedStr]) {
map[sortedStr] = [];
}
// 将当前字符串加入对应的数组
map[sortedStr].push(str);
}
// 返回哈希表的所有值
return Object.values(map);
}
二:记录字母出现次数
function groupAnagrams(strs) {
const map = {}; // 创建一个哈希表
for (let str of strs) {
// 创建一个长度为26的数组,用于记录每个字母的出现次数
const count = new Array(26).fill(0);
// 遍历字符串,更新计数数组
for (let char of str) {
count[char.charCodeAt(0) - 'a'.charCodeAt(0)]++;
}
// 将计数数组转换为字符串作为键
const key = count.join(',');
// 如果键不存在,初始化为空数组
if (!map[key]) {
map[key] = [];
}
// 将当前字符串加入对应的数组
map[key].push(str);
}
// 返回哈希表的所有值
return Object.values(map);
}
欢迎大家补充新的思路。