【LeetCode刷题笔记(2)】【Python】【字母异位词分组】【中等】

字母异位词分组

题目描述

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

  • 输入:字符串数组strs

  • 输出:结果列表

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

要求:

  • 可以按任意顺序返回答案。

示例:

  • 输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
  • 输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

  • 输入: strs = [“”]
  • 输出: [[“”]]

  • 输入: strs = [“a”]
  • 输出: [[“a”]]

提示:

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

解决方案:哈希表 + 字符串排序

【哈希表】是一种非常高效的数据结构,它通过哈希函数将键映射到值上。哈希表的优点是查找速度快,因为可以通过哈希函数快速计算出对应键的值的位置。

因此,哈希表非常适合处理字母异位词分组问题,因为它能够快速地查找存储数据(该问题涉及查找和存储)。


问题1:那么具体如何实现呢?

在python中,字典对象的底层实现是基于哈希表。==> 用字典作为哈希表存储字母异位词

问题2:在python字典对象中,键是唯一的,但在多个互为字母异位词的字符串中,什么是唯一的?

这些字符串的排序结果是唯一的!===> 哈希表的【键】可定义为字母异位词的排序结果,哈希表的【值】可用列表对象依次存储互为字母异位词这些词的排序结果正好为键的字符串!

想清楚这两个关键问题,代码也就简单了:

class Solution:
    def groupAnagrams(self, strs):  
        """  
        :type strs: List[str]  
        :rtype: List[List[str]]  
        """  
        # 创建一个空的哈希表  
        anagram_groups = {}  
        
        # 遍历给定的字符串列表  
        for word in strs:  
            # 对当前字符串进行排序,作为哈希表的键  
            sorted_word = ''.join(sorted(word))  
            
            # 以【排序后的字符串】作为键,以【列表】存放【原始字符串】作为值
            # 如果哈希表中没有这个键,就创建一个新的键值对
            if sorted_word not in anagram_groups:  
                anagram_groups[sorted_word] = [word]  
            else:  
                # 否则,将当前单词添加到对应的列表中  
                anagram_groups[sorted_word].append(word)  
                
        # 将哈希表的所有值以列表形式存储,并返回结果  
        return list(anagram_groups.values())

运行结果
在这里插入图片描述

复杂度分析

  • 时间复杂度:O(N K log K),其中 N 是 strs 中的字符串的数量,K 是 strs 中的字符串的最大长度。

    • 需要遍历整个字符串 ===> O(N)
    • 每次遍历,极端情况下需要对最长字符串排序 ==> O(K log K)
    • 总时间复杂度 ===> O(N K log K)
  • 空间复杂度:O(N K)

    • 需要用哈希表存储全部字符串

题外话

回到问题二,对于互为字母异位词的字符串,除了排序结果是唯一的,还有什么也是唯一的吗?

相同字母出现的次数一定是相同的,即也是唯一的!===> 感兴趣的读者也可以尝试将每个字母出现的次数使用字符串表示,作为哈希表的键;

结束语

  • 亲爱的读者,感谢您花时间阅读我们的博客。我们非常重视您的反馈和意见,因此在这里鼓励您对我们的博客进行评论。
  • 您的建议和看法对我们来说非常重要,这有助于我们更好地了解您的需求,并提供更高质量的内容和服务。
  • 无论您是喜欢我们的博客还是对其有任何疑问或建议,我们都非常期待您的留言。让我们一起互动,共同进步!谢谢您的支持和参与!
  • 我会坚持不懈地创作,并持续优化博文质量,为您提供更好的阅读体验。
  • 谢谢您的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/242653.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一练【将 x 减到 0 的最小操作数】

一、题目描述 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 &#xff0c;返回 最小…

PXI/PCIe/VPX机箱 ARM|x86 + FPGA测试测量板卡解决方案

PXI便携式测控系统是一种基于PXI总线的便携式测试测控系统&#xff0c;它填补了现有台式及机架式仪器在外场测控和便携测控应用上的空白&#xff0c;在军工国防、航空航天、兵器电子、船舶舰载等各个领域的外场测控场合和科学试验研究场合都有广泛的应用。由于PXI便携式测控系统…

【小程序】-【

swiper、swiper-item轮播图 swiper是滑块视图容器。其中只可放置swiper-item组件。部分常用属性如下&#xff0c;其余属性详见&#xff1a;官方文档 <view class"banner"><swiperprevious-margin"30rpx"circularautoplayinterval"3000&q…

Spark RDD、DataFrame、DataSet比较

在Spark的学习当中&#xff0c;RDD、DataFrame、DataSet可以说都是需要着重理解的专业名词概念。尤其是在涉及到数据结构的部分&#xff0c;理解清楚这三者的共性与区别&#xff0c;非常有必要。 RDD&#xff0c;作为Spark的核心数据抽象&#xff0c;是Spark当中不可或缺的存在…

深算院YashanDB与长亮科技联合,推出国产数据库金融核心解决方案

近期&#xff0c;深圳计算科学研究院&#xff08;简称“深算院”&#xff09;携手深圳市长亮科技股份有限公司&#xff08;简称“长亮科技”&#xff09;重磅推出基于崖山数据库YashanDB的金融核心解决方案&#xff0c;为推动金融机构实现技术自主可控与数字化转型全面赋能。 …

HarmonyOS(二)—— 初识ArkTS开发语言(下)之ArkTS声明式语法和组件化基础

前言&#xff1a; 通过前面ArkTS开发语言&#xff08;上&#xff09;之TypeScript入门以及ArkTS开发语言&#xff08;中&#xff09;之ArkTS的由来和演进俩文我们知道了ArkTS的由来以及演进&#xff0c;知道了ArkTS具备了声明式语法和组件化特性&#xff0c;今天&#xff0c;搭…

光栅化渲染:可见性问题和深度缓冲区算法

在前面第二章中&#xff0c;我们了解到&#xff0c;在投影点&#xff08;屏幕空间中的点&#xff09;的第三个坐标中&#xff0c;我们存储原始顶点 z 坐标&#xff08;相机空间中点的 z 坐标&#xff09;&#xff1a; 当一个像素与多个三角形重叠时&#xff0c;查找三角形表面上…

【Let‘s Encrypt SSL】使用 acme.sh 给 Nginx 安装 Let’s Encrypt 提供的免费 SSL 证书

安装acme.sh 安装 acme.sh 并设置邮箱用来接受重要通知&#xff0c;如证书快过期未更新通知 curl https://get.acme.sh | sh -s emailmyexample.com执行命令后几秒就安装好了&#xff0c;如果半天没有反应请 CtrlC 后重新执行命令。acme.sh 安装在 ~/.acme.sh 目录下&#xf…

申请Let‘s Encrypt证书

Lets Encrypt官网&#xff1a;https://letsencrypt.org/ Certbot官网&#xff1a;https://certbot.eff.org/ 1、域名控制台添加域名&#xff0c;如test.example.com 2、在服务器添加nginx配置&#xff0c;test.example.com.conf文件内容如下 # test.example.com.conf配置serve…

NCNN 源码学习【三】:数据处理

一、Topic&#xff1a;数据处理 这次我们来一段NCNN应用代码中&#xff0c;除了推理外最重要的一部分代码&#xff0c;数据处理&#xff1a; ncnn::Mat in ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, 227, 227);const float mean_v…

无法打开源文件“opencv2/opencv.hpp“

如图报错&#xff0c;看见就非常高血压 解决方案&#xff1a; 1.打开项目属性 第二步&#xff0c;注意你如果跑的是Debug&#xff0c;那么你在项目属性里面设置的必须选择Debug模式&#xff0c;跑的Release模式&#xff0c;则你必须要设置相应的Release模式&#xff01;否则你…

【解决】Windows 11检测提示电脑不支持 TPM 2.0(注意从DTPM改为PTT)

win11升级&#xff0c;tpm不兼容 写在最前面1. 打开电脑健康状况检查2. 开启tpm3. 微星主板AMD平台开启TPM2.0解决电脑健康状况检查显示可以安装win11&#xff0c;但是系统更新里显示无法更新 写在最前面 我想在台式电脑上用win11的专注模式&#xff0c;但win10不支持 1. 打…

湖仓一体架构理论与实践汇总

湖仓一体架构理论与实践汇总 软件研发本质上属于“手工业”。软件研发在很大程度上还是依赖于个人的能力。当软件规模较小时&#xff0c;依赖“手工业”可以解决问题&#xff0c;但是当软件规模大了之后再依赖“手工业”就不行了。 软件的复杂度包含两个层面&#xff1a;软件…

Git篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、如果分支是否已合并为master,你可以通过什么手段知道?二、 什么是SubGit?三、列举工作中常用的几个git命令?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文…

StatusBar、NavigationBar窗口显示在Activity下面之aosp14窗口类bug线索征集

背景&#xff1a; hi&#xff0c;粉丝朋友们&#xff1a; 从上次帮助国际学员解决了一个分屏有黑屏的bug后&#xff0c;相关blog和解决方法 https://blog.csdn.net/learnframework/article/details/134708393 解决方法看b站视频&#xff1a; https://www.bilibili.com/video/B…

常用的建表但范式、反规范化

规范化&#xff1a; 规范化是用于数据库设计的一系列原理和技术&#xff0c;它可以减少表中数据的冗余&#xff0c;增加数据完整性和一致性。通常有很多范式。 第一范式&#xff08;1NF&#xff09;&#xff1a; 常用的三种范式&#xff1a; 表中的字段都是不可再分割的原子属…

Linux---切换目录命令

1. 切换目录命令的使用 命令说明cd 目录切换到指定目录cd ~切换到当前用户的主目录cd ..切换到上一级目录cd .切换到当前目录cd -切换到上一次目录 注意: cd命令切换目录时&#xff0c;这个目录必须存在。cd 后面不写目录等价于cd ~ cd 目录效果图: cd ~效果图: cd ..效果图…

git 实用命令杂记

使用解决冲突的方式合并&#xff0c;将避免简单的自动合并 git merge origin/dev --strategyresolve清理本地已经合并到 dev 的分支 git branch --merged | grep -v dev | xargs -n 1 git branch -d分支清理 Git 之删除本地无用分支_dearfulan 的博客 - CSDN 博客_git 删除本…

同义词替换论文降重工具 快码论文

大家好&#xff0c;今天来聊聊同义词替换论文降重工具&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 标题&#xff1a;同义词替换论文降重工具&#xff1a;原理、应用与优势 一、引言 在学术研究中&am…

数据入表 | 详解数据资产会计核算与企业应对

从2015年《促进大数据发展行动纲要》到2022年《数据20条》到2023年8月份出台了《企业数据资源相关会计处理暂行规定》&#xff0c;可见国家层面对数据的重视和探索如何进一步挖掘数据价值&#xff0c;发挥数据的应用潜力。一石激起千层浪&#xff0c;面对如此重要的规定&#x…