题目难度: 中等
原题链接
今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
注意:本题相对原题稍作修改
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
O(NMlogM)
: N 是字符串数目, M 是字符串长度, 需要遍历所有字符串, 然后内部需要对字符串进行排序, 所以时间复杂度是O(NMlogM)
O(NM)
: 额外使用了一个字典, 包含所有字符串class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
# 排序后字符串作为key
d = collections.defaultdict(list)
for s in strs:
# key就是排序后的字符串
key = "".join(sorted(s))
# 将原始字符串加入字典键key对应的列表中
d[key].append(s)
# 最终结果即为字典所有的值, 每个值是一个变位词列表
return list(d.values())
大家可以在下面这些地方找到我~
我的 GitHub
我的 Leetcode
我的 CSDN
我的知乎专栏
我的头条号
我的牛客网博客
我的公众号: 算法精选, 欢迎大家扫码关注~