给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
首先明白什么是哈希,哈希就是字典,字典就是键和值。
字母异位的条件是,排序后相同。即用键中,组成不同的情况作为值。
python3代码:
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
'''
# 字符串长度相同分第一次
# 第一次分出来的内容,每一个元素的出现次数相同分第二次
temp_cut = {}
for i in strs:
if len(temp_cut) == 0:
temp_cut[len(i)] = [i]
else:
if len(i) in list(temp_cut.keys()):
temp_cut[len(i)].append(i)
else:
temp_cut[len(i)] = [i]
# 第一次分好了,得到temp_cut,然后对出现次数相同的进行第二次拆分
# 这时为了区分是不是字母异位词要进行count了
count_list = []
print("temp_cut.values:", temp_cut.values())
for i in temp_cut.values():
if len(i) >= 2:
for elem in i:
i_convert = list(elem)
for k in i_convert:
count_list.append({k:i_convert.count(k)})
# TODO:三次for循环肯定不行,优化一下
# TODO:另外思路要顺着统计个数写
print(count_list)
'''
maps = {}
for elem in strs:
key = "".join(sorted(list(elem)))
if key in maps:
maps[key].append(elem)
else:
maps[key] = [elem]
return list(maps.values())
