Leetcode 剑指 Offer II 033. 变位词组

题目难度: 中等

原题链接

今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

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

注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

题目思考

  1. 变位词有什么特点?

解决方案

思路

  • 根据题目描述, 变位词是指字母相同, 但排列不同的字符串
  • 那么如果将这些变位词自身按照字典序排序, 其排序后的字符串一定相同
  • 我们可以利用这一特点, 新建一个键为排序后的字符串, 值用于存储原始字符串列表的字典
  • 然后我们就可以将各个单词排序后的字符串作为字典的 key, 并将原始字符串存储在字典的值列表中
  • 最终结果即为字典的所有值列表
  • 下面的代码就对应了上面的整个过程, 并且有详细的注释, 方便大家理解

复杂度

  • 时间复杂度 O(NMlogM): N 是字符串数目, M 是字符串长度, 需要遍历所有字符串, 然后内部需要对字符串进行排序, 所以时间复杂度是O(NMlogM)
  • 空间复杂度 O(NM): 额外使用了一个字典, 包含所有字符串

代码

class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:# 排序后字符串作为keyd = collections.defaultdict(list)for s in strs:# key就是排序后的字符串key = "".join(sorted(s))# 将原始字符串加入字典键key对应的列表中d[key].append(s)# 最终结果即为字典所有的值, 每个值是一个变位词列表return list(d.values())

大家可以在下面这些地方找到我~😊

我的 GitHub

我的 Leetcode

我的 CSDN

我的知乎专栏

我的头条号

我的牛客网博客

我的公众号: 算法精选, 欢迎大家扫码关注~😊

算法精选 - 微信扫一扫关注我

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何学习PHP语法和基本概念? - 易智编译EaseEditing

学习PHP语法和基本概念是成为一个合格的PHP开发者的第一步。以下是一些学习PHP语法和基本概念的建议&#xff1a; 官方文档&#xff1a; PHP官方提供了详细的文档&#xff0c;包括语言参考、函数参考和示例等。阅读官方文档是学习PHP语法和基本概念的最佳途径。你可以访问PHP…

机器学习——自然语言处理(一)

1 分词 1.1 设计原则 切分粒度大&#xff1b;非字典词少、单字字典词少&#xff1b;总体次数少。 1.2 基于词典匹配的分词 1.3 基于语法和规则的分词 目前处在试验阶段 1.4 基于统计的分词 1.5 技术难点 1.5.1 歧义识别 交集型歧义&#xff1a;AB | C or A | BC 组合型…

逆向(异或)

在学习逆向前我们需要掌握一些汇编的基础知识的 同时我们得知道可执行文件的原理 计算机生成可执行文件&#xff0c;我们大致可以简单的这么理解 1.asm源程序文件 2.asm源程序生成obj也就是目标文件 3.由目标文件链接生成可执行文件&#xff0c;Windows的可执行文件通常是EXE&a…

【软考网络管理员】2023年软考网管初级常见知识考点(18)-安全协议SSL与PGP、数据加密技术

涉及知识点 安全套接层协议SSL详解&#xff0c;PGP协议是什么&#xff1f;数据加密技术有哪些&#xff1f;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多考点…

优思学院|什么是六西格玛黑带?

六西格玛黑带&#xff0c;这是一个有趣的称谓。这个称号意味着拥有它的人在六西格玛方法和统计工具应用方面有很高的造诣。在企业中&#xff0c;只有中层以上的人才能获得这个称号。 黑带这个词源自跆拳道&#xff0c;因为跆拳道最高段位的人所戴的腰带是黑色的。后来&#xf…

计算机图形硬件(二) 5 - 1 视频显示设备

现在&#xff0c;计算机图形学的功能与应用已经得到了广泛承认&#xff0c;大量的图形硬件和软件系统已经应用到了几乎所有的领域。通用计算机甚至许多手持计算器也已经普遍具备二维及三维应用的图形功能。在个人计算机上也可以配用多种交互输人设备及图形软件包。对于高性能应…

web入门——springboot、HTTP协议

这里写目录标题 springboot入门 http协议概念以及特点请求协议格式请求头的一些含义解释 响应协议格式具体的状态码以及响应头的一些含义解释 协议解析 springboot 入门 http协议 概念以及特点 请求协议 格式 包括请求行、请求头、请求体三部分&#xff08;请求体是pos请求方…

SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计

系列文章&#xff1a; SpringBoot Vue前后端分离项目实战 || 一&#xff1a;Vue前端设计 SpringBoot Vue前后端分离项目实战 || 二&#xff1a;Spring Boot后端与数据库连接 SpringBoot Vue前后端分离项目实战 || 三&#xff1a;Spring Boot后端与Vue前端连接 SpringBoot V…

C++中的exec()函数

exec()函数在C中是一个进程控制函数&#xff0c;用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程的代码和数据&#xff0c;创建新的进程运行其他程序。exec()函数有多个版本&#xff0c;例如execl、execv、execle、execve等&#xff0c;根据不同的参数类型…

go-zero的配置及gorm、自定义返回等的引入以及扩展

工程维度&#xff08;摘自官网&#xff09; . ├── consumer ├── go.mod ├── internal │ └── model ├── job ├── pkg ├── restful ├── script └── service consumer&#xff1a; 队列消费服务internal&#xff1a; 工程内部可访问的公共模块job&a…

实战:k8s证书续签-2023.6.19(测试成功)

实战&#xff1a;k8s证书续签-2023.6.19(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 1、前言 k8s集群核心的证书有2套&#xff0c;还有1套非核心的(即使出问题也问题不大)。 ⚠️ 如果是kubeadm搭建的k8s集群&#xff0c;其有效期为…

如何快速判断是否在容器环境

在渗透测试过程中&#xff0c;我们的起始攻击点可能在一台虚拟机里或是一个Docker环境里&#xff0c;甚至可能是在K8s集群环境的一个pod里&#xff0c;我们应该如何快速判断当前是否在容器环境中运行呢&#xff1f; 当拿到shell权限&#xff0c;看到数字和字母随机生成的主机名…