LeetCode 热题 100第二题:字母易位词分组python版本

第一部分:题目信息

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

示例 1:

输入: strs = "eat", "tea", "tan", "ate", "nat", "bat"

输出:\["bat","nat","tan","ate","eat","tea"]

解释:

  • 在 strs 中没有字符串可以通过重新排列来形成 "bat"。
  • 字符串 "nat" 和 "tan" 是字母异位词,因为它们可以重新排列以形成彼此。
  • 字符串 "ate" ,"eat" 和 "tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = ""

输出:\[""]

示例 3:

输入: strs = "a"

输出:\["a"]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

第二部分:代码实现

讲解如下:

第一步:对原始列表中的每个字符串进行字母排序,生成排序后字符串列表

核心目的 :为每个原始字符串生成一个 "特征标识"(字母排序后的字符串),后续通过这个特征标识判断哪些原始字符串是同类(比如eat、tea排序后都是aet,说明它们是同类)。

复制代码
#第一步:重新排序
str_sort=[]
for in_str in strs:
    first = in_str
    list_first = list(first)
    list_first_sort = sorted(list_first)
    first_sort = ''.join(list_first_sort)
    str_sort.append(first_sort)
print(str_sort)

第二步:通过集合去重,获取同类字符串的类别数量(count)

核心目的 :统计有多少组不同的字符串(即最终二维列表有多少个内层列表),set 集合的 "元素唯一性" 可自动剔除 str_sort 中的重复特征,长度即为类别数。

复制代码
#第二步:得到相同元素的类别数量count(set集合自动去重)
str_sort_set=set(str_sort)
count=len(str_sort_set)

第三步:创建一个包含 count 个空列表的二维列表(str_count)

核心目的 :提前搭建归类的 "容器",准备好 count 个空的内层列表,后续将同类的原始字符串存入对应的空列表中。

复制代码
#第三步:得到count个归类的数组,双层list
str_count=[]
for i in range(count):
    str_count.append([])

第四步:按 "排序特征" 匹配,将原始字符串归类到对应内层列表中

核心目的:通过 "排序特征" 的匹配,把原始字符串存入对应的内层列表,完成最终归类,这是代码的核心业务逻辑。

复制代码
#第四步:开始存放元素到指定位置
count_index=0
for target in str_sort_set:
    for j in range(len(str_sort)):
        if(str_sort[j]==target):
            str_count[count_index].append(strs[j])
    count_index=count_index+1
print(str_count)

完整代码:

复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        #第一步:重新排序
        str_sort=[]
        for in_str in strs:
            first = in_str
            list_first = list(first)
            list_first_sort = sorted(list_first)
            first_sort = ''.join(list_first_sort)
            str_sort.append(first_sort)
        print(str_sort)
        #第二步:得到相同元素的类别数量count(set集合自动去重)
        str_sort_set=set(str_sort)
        count=len(str_sort_set)

        #第三步:得到count个归类的数组,双层list
        str_count=[]
        for i in range(count):
            str_count.append([])
        #第四步:开始存放元素到指定位置
        count_index=0
        for target in str_sort_set:
            for j in range(len(str_sort)):
                if(str_sort[j]==target):
                    str_count[count_index].append(strs[j])
            count_index=count_index+1
        return str_count
相关推荐
VidDown5 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
贵州诚鑫致达科技有限公司5 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
死磕音视频6 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林7 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
Navigator_Z7 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
澜山奕秋8 小时前
RHCSA
linux·运维·服务器
pride.li8 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook8 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺9 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python