leetcode 49. 字母异位词分组
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. 字母异位词分组相关推荐
- LeetCode 49字母异位词分组50pow(x,n)51八皇后
原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...
- LeetCode 49. 字母异位词分组(哈希)
1. 题目 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例:输入: ["eat", "tea", "ta ...
- leetcode 49. 字母异位词分组(排序+hash)
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- LeetCode 49. 字母异位词分组 Group Anagrams
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- LeetCode 49 字母异位词分组
力扣 思路:哈希表: 排序:对两个字符串分别进行排序之后得到的字符串是相同的 将排序之后的字符串作为哈希表的键 (参考LeetCode官方题解) 定义哈希表 unordered_map< ...
- 【LeetCode】【HOT】49. 字母异位词分组(递归)
[LeetCode][HOT]49. 字母异位词分组 文章目录 [LeetCode][HOT]49. 字母异位词分组 package hot;import java.util.ArrayList; i ...
- Leetcode刷题100天—49. 字母异位词分组( 排序)—day37
前言: 作者:神的孩子在歌唱 大家好,我叫运智 49. 字母异位词分组 难度中等847收藏分享切换为英文接收动态反馈 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. ...
- 【LeetCode】49.字母异位词分组 (三种解法开拓思路,java实现)
49. 字母异位词分组 分析 方法一:排序数组分类 思路 当且仅当它们的排序字符串相等时,两个字符串是字母异位词. 算法 维护一个映射 ans : {String -> List},其中每个键 ...
- 49. 字母异位词分组
49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次. 示例 ...
最新文章
- SSM+微信小程序实现物业管理系统
- Java实现链表结构的具体代码
- 日志 log4j.xml配置详解
- C#实现实体类和XML相互转换
- 2019量子计算机上市公司,2019年第一炮:量子计算机终于来了!
- 河海大学计算机与信息学院 王晶晶,信息学部 计算机与信息学院
- 狗、油腻、保温杯的中年
- php排序商品价格的功能,织梦做商城,按销量,价格等自定义模型字段排序列表解决方案...
- Redis 官方文档译注
- 高一计算机算法教案,高中信息技术 算法及其实现 教案
- 研发软件测试费计入什么科目,研发支出中测试费计入什么科目
- Navicat导入excel表格(xlsx)报错解决
- 欧几里得扩展欧几里得算法
- 仿QQ音乐css布局
- 学习竞争情报的第一阶段——读书
- 信息安全行业从业者----鱼龙混杂也藏龙卧虎
- Android 获取IMEI码
- CF刷题笔记之思维切入篇--持续更新中
- 冗余分析(RDA)中若包含生物学重复会怎样?
- MAPGIS-TDE 三维处理平台简介