博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode每天一题】Group Anagrams(变位词组)
阅读量:7080 次
发布时间:2019-06-28

本文共 1276 字,大约阅读时间需要 4 分钟。

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
Output: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter

思路


  这道题在一开始看到的时候,没有什么具体的思路。但是在想了一会之后觉得可以使用辅助字段来解决该问题。意思就是我们对列表中的字符串进行排序,然后将相同的添加进同一列表中。当遍历完毕之后得到最后的结果。时间复杂度为O(n mlog m),其中n为列表的长度,m为其中最长的字符串长度。空间复杂度为O(n*m)。

  在后面看到别人的解答之后学习到了另一种思路就是因为字符只有26个,所有我们设置一个列表,其中包含26个0,然后对列表中每一个字符串进行统计相应的字母出现的次数,然后把他加到相应的位置,然后将其转化为元祖并利用字典,将其对应的字符串添加到对应的列表中。时间复杂度复杂度为O(n*m), n为列表的长度,m为最长的单词数。空间复杂度为O(n*m)。

第一种思路的解决代码


 

1 class Solution(object):2     def groupAnagrams(self, strs):3         ans = collections.defaultdict(list)   # 辅助字典4         for s in strs:5             ans[tuple(sorted(s))].append(s)    # 排序之后将其添加到对应的列表中6         return ans.values()   # 返回列表

第二种思路的解决代码


 

1 class Solution(object):2     def groupAnagrams(self, strs):3         hmap = collections.defaultdict(list)     4         for st in strs:5             array = [0] * 26         # 26个元素的列表6             for l in st:              # 将字符串元素计数7                 array[ord(l) - ord('a')] += 1  8             hmap[tuple(array)].append(st)    # 按照元素出现的个数进行添加9         return hmap.values()

转载于:https://www.cnblogs.com/GoodRnne/p/10719695.html

你可能感兴趣的文章
SQL点滴21—几个有点偏的语句
查看>>
Android各种效果集合
查看>>
【转】Geary's C
查看>>
Linux中查看socket状态(转)
查看>>
public-private-protected-默认缺省 的区别
查看>>
React Native上手
查看>>
0919 - iPaste 上架 App Store
查看>>
iKcamp&掘金Podcast直播回顾(12月2号和9号的两场)
查看>>
Java简短知识点
查看>>
Hibernate第八篇【懒加载】
查看>>
[面试∙网络] TCP/IP(四):TCP 与 UDP 协议简介
查看>>
浅谈 Objective-C Associated Objects
查看>>
编程或者软件开发到底算不算知识?
查看>>
iOS UI绘制原理
查看>>
JavaScript 二进制的 AST
查看>>
自定义控件(三) 源码分析measure流程
查看>>
不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱
查看>>
SSL/TLS协议安全系列:CBC 模式的弱安全性介绍(一)
查看>>
几种通用防注入程序绕过方法
查看>>
Clickjacking简单介绍
查看>>