给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
输出: [['bat'], ['nat', 'tan'], ['ate', 'eat', 'tea']]
示例 2:
输入: strs = ['']
输出: [['']]
示例 3:
输入: strs = ['a']
输出: [['a']]
提示:
题目信息:任意顺序
首先写一个判断字母异位词的函数,然后使用哈希缓存每个组,然后每次存哈希需要把每个 key 匹配一遍,复杂度 O(mnk)
字符串排序后如果是异位词则相同,则复杂度减到 O(m nlogn) nlog(n)假定排序复杂度
function groupAnagrams(strs: string[]): string[][] {
const groupMap: Record<string, string[]> = {}
for (let i = 0; i < strs.length; i++) {
const sorted = strSort(strs[i])
if (groupMap[sorted]) {
groupMap[sorted].push(strs[i])
} else {
groupMap[sorted] = [strs[i]]
}
}
return Object.values(groupMap)
}
function strSort(s: string) {
return s.split('').sort().join('')
}