LeetCode 第 49 题“字母异位词分组”(Group Anagrams)要求你将字符串数组中的字符串进行分组,使得每个组内的字符串都是彼此的字母异位词(即字母相同,但排列不同的字符串)。
一个有效的方法是使用哈希表(在 Python 中为字典)来解决这个问题。具体思路是,对于每个字符串,我们将其字母排序(不考虑大小写),并将排序后的字符串作为字典的键,而将原始字符串的列表作为字典的值。这样,所有字母相同的字符串都会被分配到同一个键下,即同一个组中。
以下是一个可能的 Python 实现:
from collections import defaultdict
def groupAnagrams(strs):
# 创建一个 defaultdict,其默认值为列表
anagrams = defaultdict(list)
for s in strs:
# 将字符串转换为小写(可选,取决于题目要求是否考虑大小写)
# 然后排序,得到键
key = ''.join(sorted(s.lower()))
# 将原始字符串添加到对应的键下
anagrams[key].append(s)
# 返回字典的值,即所有分组
return list(anagrams.values())
# 示例
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
print(groupAnagrams(strs))
# 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
这段代码首先创建了一个 defaultdict
,它的默认值是列表。然后,对于输入字符串数组中的每个字符串,我们先将其转换为小写(这一步是可选的,取决于题目是否要求考虑大小写),然后对其字符进行排序,并将排序后的字符串作为键。之后,我们将原始字符串添加到以该键为索引的列表中。最后,我们返回字典中的所有值,即分组后的字符串列表。
注意,这里使用 sorted()
函数对字符串进行排序,并通过 ''.join()
将排序后的字符列表转换回字符串,作为字典的键。由于题目中未明确要求考虑大小写,因此在示例代码中我们使用了 .lower()
方法将字符串转换为小写,以确保所有大小写不同的字符串都能被正确分组。如果题目要求考虑大小写,则可以省略 .lower()
方法。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END
暂无评论内容