题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
题目链接
思路
“nat"和"tan"排序后都是"atn”,利用这个性质,可以用一个哈希表存储,键是排序后的字符串,值是未排序的字符串
但要注意,用sorted(s)
之后得到的是一个数组[‘a’, ‘n’, ‘t’],数组转字符串用join
函数
时空复杂度
时间复杂度:O(nklogk),klogk是排序耗费的时间,k是每个字符串的长度,n是遍历列表耗费的时间,n是列表长度
空间复杂度:O(nk)
参考代码
class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:cnt = defaultdict(list)for i,s in enumerate(strs):print(sorted(s))cnt[''.join(sorted(s))].append(s)return list(cnt.values())