leetcode热题100. 字母异位词分组

简介: leetcode热题100. 字母异位词分组

题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入:

strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]

输出:

[[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例 2:

输入: strs = [“”]

输出: [[“”]]

示例 3:

输入: strs = [“a”]

输出: [[“a”]]

提示:

1 < = s t r s . l e n g t h < = 1 0 4 1 <= strs.length <= 10^41<=strs.length<=104

0 < = s t r s [ i ] . l e n g t h < = 100 0 <= strs[i].length <= 1000<=strs[i].length<=100

strs[i] 仅包含小写字母

思路

将每一个字符串排序,将排好序的字符串当作key,然后存入一个字典中。

这样做的话,对于所有的字母异位词来说就都只有一个共同的key,然后可将他们当作一组添加到答案中

复杂度

时间复杂度:

O ( n ) O(n)O(n)

空间复杂度:

O ( n ) O(n)O(n)

Code

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dic = collections.defaultdict(list)
        n = len(strs)
        for i in range(n):
            key = str( sorted(strs[i]) )
            dic[key].append(strs[i])
        
        ans = [i for i in dic.values()]
        return ans


目录
相关文章
LeetCode 热题100——单调栈
LeetCode 热题100——单调栈
19 0
|
4天前
leetcode代码记录(第一个出现两次的字母
leetcode代码记录(第一个出现两次的字母
9 2
|
4天前
leetcode代码记录(有效的字母异位词
leetcode代码记录(有效的字母异位词
8 1
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
28天前
【力扣】1832.判断句子是否为全字母句
【力扣】1832.判断句子是否为全字母句
|
2月前
|
存储 算法
《LeetCode 热题 HOT 100》——寻找两个正序数组的中位数
《LeetCode 热题 HOT 100》——寻找两个正序数组的中位数
|
2月前
|
网络协议
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
|
2月前
《LeetCode 热题 HOT 100》—— 两数相加
《LeetCode 热题 HOT 100》—— 两数相加
|
4天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
8 0
|
4天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
9 0