给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[["ate","eat","tea"],["nat","tan"],["bat"]
]

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

排序

由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。

Python

class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:ans = collections.defaultdict(list)for word in strs:key = "".join(sorted(word))ans[key].append(word)return list(ans.values())

复杂度分析

  • 时间复杂度:O(nklog⁡k)O(nk \log k)O(nklogk),其中 nnn 是 strs\textit{strs}strs 中的字符串的数量,kkk 是 strs\textit{strs}strs 中的字符串的的最大长度。需要遍历 nnn 个字符串,对于每个字符串,需要 O(klog⁡k)O(k \log k)O(klogk) 的时间进行排序以及 O(1)O(1)O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklog⁡k)O(nk \log k)O(nklogk)。

  • 空间复杂度:O(nk)O(nk)O(nk),其中 nnn 是 strs\textit{strs}strs 中的字符串的数量,kkk 是 strs\textit{strs}strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。

《每日一题》49. Group Anagrams 字母异位词分组相关推荐

  1. Leetcode每日一题:49.group-anagrams(字母异位词分组)

    这道题我认为题目没有写清楚,测试用例中两个完全相同的字符串也归为一组,然而从题意中我们会认为这两个字符串只需放入一个即可 解题思路: 方法1:利用hash + map 先用hash判断字符串是否相同 ...

  2. Leetcode每日一题:242.有效的字母异位词

    如有错误,感谢指正! // // Created by Administrator on 2020/3/31. // #include <iostream> #include <st ...

  3. Leetcode刷题100天—49. 字母异位词分组( 排序)—day37

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 49. 字母异位词分组 难度中等847收藏分享切换为英文接收动态反馈 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. ...

  4. 49. 字母异位词分组

    49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示例 ...

  5. 【LeetCode】【HOT】49. 字母异位词分组(递归)

    [LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...

  6. LeetCode 热题 HOT — 字母异位词分组

    字母异位词分组 原题地址 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. ...

  7. leetcode 49. 字母异位词分组

    49. 字母异位词分组 - 力扣(LeetCode) 一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词. 一开始算 ...

  8. 【LeetCode】49.字母异位词分组 (三种解法开拓思路,java实现)

    49. 字母异位词分组 分析 方法一:排序数组分类 思路 当且仅当它们的排序字符串相等时,两个字符串是字母异位词. 算法 维护一个映射 ans : {String -> List},其中每个键 ...

  9. LeetCode 49字母异位词分组50pow(x,n)51八皇后

    原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...

最新文章

  1. 【转】父类子类指针相互转换问题
  2. 用Python实现Gauss-Jordan求逆矩阵
  3. oracle定时器定时删除30天前的数据_Redis的过期键删除策略
  4. 人际交往的“三有三避”
  5. script与scriptreplay用法
  6. 多路平衡查找树 --- B(B-)树
  7. 鸿蒙电视应用市场,任正非:鸿蒙系统已上线,未来将被应用到手机、平板、电视系列产品上...
  8. maven安装以及常用配置,idea如何配置maven
  9. HTML5 Video播放服务端大文件
  10. MSP430 PIN 操作寄存器
  11. CDH 5.13.0安装方法
  12. python读取hive方案分析
  13. 史上最全的 struts2 面试题
  14. 程序员职场突破——建立优势策略,找到职业突破发力点
  15. Excel-VBA 快速上手(四、Excel 程序事件、工作簿事件、工作表事件)
  16. CYGWIN安装方法
  17. 高斯函数的傅里叶变换
  18. java入门(3)——简易绘图板
  19. 受邀参加2009中国电子商务创新发展高峰论坛
  20. php 抓取弹幕,php实现斗鱼弹幕,一起来欣赏弹幕吧~

热门文章

  1. 概要设计说明书(转载)
  2. iOS高仿城觅应用客户端项目(开发思路和代码)
  3. 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation
  4. U盘文件名称变成乱码的解决方法
  5. 10分钟学会理解和解决MySQL乱码问题
  6. 启动多线程的两种情况比较
  7. autocad.net中判断当前被激活的空间
  8. 第二章 选择符和属性
  9. Processing绘制四边形
  10. go waitgroup.done()异常处理_Go 异常处理