字母异位词分组 -- 详解

本文介绍了一种Python解决方案,用于将给定字符串数组中的字母异位词组合在一起。算法利用哈希表(defaultdict)存储排序后的字符串,时间复杂度为O(n*klogk),空间复杂度为O(nk),其中n为字符串数量,k为字符串最大长度。文中还提及了列表与数组的区别以及在Python中使用NumPy创建数组的方法。
摘要由CSDN通过智能技术生成

字母异位词分组

题目描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。


解:

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]])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值