49. 字母异位词分组 - 力扣(LeetCode)

一开始想的是把各个字符串中每个字符ascii码值相加,然后相同的ascii码值放在一个组,在相同的ascii码值组中再去细找字母异位词。

一开始算完了ascii码的值,但是到细找字母异位词就没有思路了,然后看了一下题解。

题解的大概思想是若是字母异位词,则他们经过排序后应该是相同的,如:

'eat','ate','tea'这三个排序后应该都是'aet',可利用排序后的字符串作为哈希表的字符串,这样就有了思路,于是在我原本思路的基础上进行了改进。

代码:

class Solution(object):def sortstrs(self,strs):db = dict()#存放ascii码值相同的字符串boat = 0for i in range(len(strs)):tmp = 0for j in range(len(strs[i])):tmp += ord(strs[i][j])if tmp in db:db[tmp].append(strs[i])else:db[tmp] = [strs[i]]return dbdef transtring(self,strs):res = []for i in range(len(strs)):tmp = ''for j in range(len(strs[i])):tmp += strs[i][j]res.append(tmp)return resdef groupAnagrams(self, strs):""":type strs: List[str]:rtype: List[List[str]]"""if len(strs) == 1:return [strs]#不用考虑同一组ascii相同的字符串会出现字母个数不同情况 因为单个字母ascii值很大dw = self.sortstrs(strs)res = []for i, j in enumerate(dw):#j是dw的key值索引if(len(dw[j]) == 1):res.append(dw[j])else:bo = dw[j].copy()bo = list(map(lambda x: sorted(x), bo))bo = self.transtring(bo)tmp = dict()for k in range(len(bo)):if bo[k] not in tmp:tmp[bo[k]] = [dw[j][k]]else:tmp[bo[k]].append(dw[j][k])for _, t in enumerate(tmp):res.append(tmp[t])return res

· 函数sortstrs是将相同ascii码值的字符串放一起

· 函数transtring是将排序后的字符串由list转化为str类型

但如果有了字符串排序那一步,就好像不用把相同的ascii码值的字符串放一起了

改进后:

class Solution(object):def transtring(self, strs):res = []for i in range(len(strs)):tmp = ''for j in range(len(strs[i])):tmp += strs[i][j]res.append(tmp)return resdef groupAnagrams(self, strs):""":type strs: List[str]:rtype: List[List[str]]"""if len(strs) == 1:return [strs]#不用考虑同一组ascii相同的字符串会出现字母个数不同情况 因为单个字母ascii值很大dw = list(strs)print(dw)#将每个字符串按字母大小排序dw = list(map(lambda x:sorted(x),dw))print(dw)#返回的字符串是列表 要转化成str 利用transtring函数返回的是排序完的字符串的列表dw = self.transtring(dw)print(dw)kill = dict()for i in range(len(dw)):if dw[i] not in kill:kill[dw[i]] = [strs[i]]else:kill[dw[i]].append(strs[i])return list(kill.values())

下面的意思就是若找不到key值,则返回空列表

mp = collections.defaultdict(list)

# 需要将 list 转换成 tuple 才能进行哈希

力扣官方的第二种做法,本质还是运用了哈希表

leetcode 49. 字母异位词分组相关推荐

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

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

  2. LeetCode 49. 字母异位词分组(哈希)

    1. 题目 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例:输入: ["eat", "tea", "ta ...

  3. leetcode 49. 字母异位词分组(排序+hash)

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  4. LeetCode 49. 字母异位词分组 Group Anagrams

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  5. LeetCode 49 字母异位词分组

    力扣 思路:哈希表: 排序:对两个字符串分别进行排序之后得到的字符串是相同的 将排序之后的字符串作为哈希表的键     (参考LeetCode官方题解)  定义哈希表 unordered_map< ...

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

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

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

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

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

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

  9. 49. 字母异位词分组

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

最新文章

  1. SSM+微信小程序实现物业管理系统
  2. Java实现链表结构的具体代码
  3. 日志 log4j.xml配置详解
  4. C#实现实体类和XML相互转换
  5. 2019量子计算机上市公司,2019年第一炮:量子计算机终于来了!
  6. 河海大学计算机与信息学院 王晶晶,信息学部 计算机与信息学院
  7. 狗、油腻、保温杯的中年
  8. php排序商品价格的功能,织梦做商城,按销量,价格等自定义模型字段排序列表解决方案...
  9. Redis 官方文档译注
  10. 高一计算机算法教案,高中信息技术 算法及其实现 教案
  11. 研发软件测试费计入什么科目,研发支出中测试费计入什么科目
  12. Navicat导入excel表格(xlsx)报错解决
  13. 欧几里得扩展欧几里得算法
  14. 仿QQ音乐css布局
  15. 学习竞争情报的第一阶段——读书
  16. 信息安全行业从业者----鱼龙混杂也藏龙卧虎
  17. Android 获取IMEI码
  18. CF刷题笔记之思维切入篇--持续更新中
  19. 冗余分析(RDA)中若包含生物学重复会怎样?
  20. MAPGIS-TDE 三维处理平台简介

热门文章

  1. 员工管理系统Android版
  2. 关于开源的GIS现状分析
  3. 广东机电职业技术学校计算机怎么样,公办|【广东机电职业技术学院】录取分数/学校环境、宿舍介绍...
  4. 【IoT】产品设计之品牌、LOGO和VI是什么?
  5. 使用电汇方式收取Google Adsense广告费用
  6. enq:SQ-contention(SQ锁)测试
  7. 设置Gridview的列是否自动换行
  8. 是否需要读万卷书,行万里路
  9. 课程设计-多种排序方式
  10. 资料:《新概念英语》旧版(第一册)原文及全文翻译