1:题目描述(力扣)
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
2:解题思路
题意是将由相同字母组成的词放到一个列表中,在将这些列表放到一个列表中。
思路:我们可以将数组strs中的每个元素按元素的字母进行升序排列(sorted()函数),将排序后的结果转化为字符串格式(因为元素按字母排序后得到的是一个列表,列表不能作为字典的key,字典的key只能是不可变类型),再将得到的结果作为字典的key值,元素以列表的形式作为value值,添加到字典中。这样就可以统计哪些词是满足题意的。
具体步骤如下:
第一步:定义一个字典res,存放满足条件的元素。
第二步:使用for循环遍历数组strs,将元素通过sorted()函数进行排序,并转化为字符串赋值给变量key。
第三步:判断key是否已存在于字典中,如果不存在,添加元素,将元素以列表的形式作为value值,赋值给key;如果存在,则在key值对应的列表中添加该元素。
第四步:因为我们需要的是由相同字母组成的词,即为字典res的value值,因此我们需要返回字典res的value值,以列表的形式返回。
代码展示:
class Solution:
def groupAnagrams(self, strs):
res = {}
for item in strs:
# 将排序后的元素,转化为字符串格式赋值给key,因为字典的key为不可变类型,而sorted()得到的结果是一个列表,列表是可变类型
key = str(sorted(item))
if key not in res.keys():
# key不存在,则添加新的key和value
res[key] = [item]
else:
# key存在,则往对应的value值列表中添加元素
res[key].append(item)
# 以列表的形式返回字典的value值
return list(res.values())