字母异位词分组
题目描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
解:
class Solution:
#这个方法接受一个对象实例和一个字符串列表作为参数,返回一个列表,其中的每个元素也是一个列表,列表其中的每个元素都是字符串
def groupAnagrams(self,strs:List[str]) -> List[List[str]]:
#创建一个名为mp的默认字典
#defaultdict 是 collections 模块中的一种字典子类
mp = collections.defaultdict(list)
for st in strs:
#eg:st:cba,那么sorted(st)将返回['a','b','c'],然后"".join(sorted(st))将返回"abc"
key = "".join(sorted(st))
#如 mp 字典中不存在键为"abc"的条目,那么mp[key]会自动创建一个空列表,并将其与键"abc"关联起来
#然后 append(st) 将字符串 cab 添加到与键"abc"关联的列表中,即将 cab 加入到 mp["abc"]这个列表中
mp[key].append(st)
return list(mp.values())
时间复杂度:O(n*klogk)
1、对于给定的字符串列表 strs 需要遍历其中的每个字符串。遍历列表的时间复杂度为 O(n),其中 n 是列表中字符串的数量;
2、对于每个字符串,需要对其进行排序,排序的时间复杂度为 O(klogk),其中 k是字符串的长度;因此总的时间复杂度为O(n*klogk)。
空间复杂度:O(nk)
其中 n 是 strs 中字符串的数量,k 是strs中字符串的最大长度。需要用哈希表存储全部字符串。
基础知识:
列表与数组
- 列表(List):是一种动态数组,可以存储任意类型的对象。这意味着列表可以同时包含数组、字符串、浮点数等各种类型的元素,并且可以随时动态的添加、删除或修改其中的元素。
- 数组(Array):它在内存中存储的是相同类型的数据。通常是整数,浮点数。数组大小在创建的时候就已经确定,无法动态调整大小。用途:数值计算、科学计算和数据处理等领域,可以提供更高效的数据访问和处理。
定义列表
my_list = [1,2,3,4,5]
mixed_list = [1,"hello",True,3.14]
list = []
定义数组
在python中,可以使用第三方库NumPy来创建和操作数组。
import numpy as np
#创建一维数组
my_array = np.array([1,2,3,4,5])
#创建二维数组
two_array = np.array([[1,2,3],[4,5,6],[,7,8,9]])