看题目前心里随便想的:
这个是我第一次正式刷LeetCode的第一道题,我完全不懂任何的原理,学习数据结构也有点太久远了,现在都有一些忘记了,所以还是一点点学习吧(嘿嘿)
题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
拿到题目的想法点(不一定正确):
对列表,先获取第一个词,然后获取每一个字母,A对应0,Z对应23,然后重新排列每一个词,然后两两作比对,如果两个词对应上了,或者多个词对应上了,就输出原来样式的匹配词的列表形式然后这样依次类推(有一个问题就是重复怎么样去掉)。但是这样应该空间复杂度和时间复杂度都拉满了。
--所以我打算看一下题解
题解
思路
字符串处理
(PS:什么是字符串处理,之后学习的时候可以看一下)
Code
class Solution(object):
def groupAnagrams(self, strs):
d = defaultdict(list)
for s in strs: d[''.join(sorted(s))].append(s)
return list(d.values())
我的拆分:
1.创建了一个默认字典“d”
2.for循环,“s”是字符串“strs”的每一个元素(如"tea"
)
for s in strs: d[''.join(sorted(s))].append(s),这个里面的“:”表示是for循环的开始,只是吧d[''.join(sorted(s))].append(s)和“:”写到了一起,没有特殊的语法。''.join(list)
: .join()
是Python字符串的一个方法,它合并(或“连接”)列表中的所有字符串元素,并在每个元素之间插入指定的分隔符。在你的代码中,分隔符是空字符串''
,所以 .join()
就直接将列表中的字符串元素组合在一起,没有额外的字符被插入。也就是s取来,然后用无间隔的‘’,连接重新排序好的字符串
比如说‘eat’重新排列是ate。然后在d的这个键 后面的值是原来的s,如果有这个键的列表,就把这个s加入到这个列表当中,如果没有这个列表,就创建一个这个列表,然后把s加入。
2024年3/8日-第一刷