当前位置: 首页 > news >正文

LeetCode 49 字母异位词分组

LeetCode 49 字母异位词分组

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/group-anagrams/description/

博主Github:https://github.com/GDUT-Rp/LeetCode

题目:

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

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

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

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

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

解题思路:

方法一:每个字符串排序,放到map里整理

对每个str进行排序,放到一个map<string, []string>里,这里的[]string就是答案了

Golang

func groupAnagrams(strs []string) [][]string {strMap := make(map[string][]string)// 逐个取出来然后排序for _, str := range strs {astr := sortString(str)if v, ok := strMap[astr]; ok {v = append(v, str)strMap[astr] = vcontinue}alist := make([]string, 0)alist = append(alist, str)strMap[astr] = alist}// mapvar allList [][]stringfor _, v := range strMap {allList = append(allList, v)}return allList
}func sortString(str string) string {var needSort []bytefor i:=0; i<len(str); i++ {needSort = append(needSort, str[i])}sort.SliceStable(needSort, func(i, j int) bool {return needSort[i] > needSort[j]})return string(needSort)
}

复杂度分析

时间复杂度: O ( n k log ⁡ k ) O(nk \log k) O(nklogk),其中 n 是 strs \textit{strs} strs 中的字符串的数量,k 是 strs \textit{strs} strs 中的字符串的的最大长度。需要遍历 n n n 个字符串,对于每个字符串,需要 O ( k log ⁡ k ) O(k \log k) O(klogk) 的时间进行排序以及 O ( 1 ) O(1) O(1) 的时间更新哈希表,因此总时间复杂度是 O ( n k log ⁡ k ) O(nk \log k) O(nklogk)

空间复杂度: O ( n k ) O(nk) O(nk),其中 n n n strs \textit{strs} strs 中的字符串的数量,k 是 strs \textit{strs} strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。

在这里插入图片描述

方法二:技数

对每个字符串的字母取频数,cnt[26]作为key,进行统计整理 map<cnt[26], []string>

Golang

func groupAnagrams(strs []string) [][]string {cntMap := make(map[[26]int][]string)for _, str := range strs {cnt := [26]int{}for _, s := range str {cnt[s - 'a']++}cntMap[cnt] = append(cntMap[cnt], str)}var result [][]stringfor _, v := range cntMap {result = append(result, v)}return result
}

复杂度分析

时间复杂度: O ( n ( k + ∣ Σ ∣ ) ) O(n(k+|\Sigma|)) O(n(k+∣Σ∣)),其中 n 是 strs \textit{strs} strs 中的字符串的数量,k 是 strs \textit{strs} strs 中的字符串的的最大长度, Σ \Sigma Σ 是字符集,在本题中字符集为所有小写字母, ∣ Σ ∣ = 26 |\Sigma|=26 ∣Σ∣=26。需要遍历 n 个字符串,对于每个字符串,需要 O ( k ) O(k) O(k) 的时间计算每个字母出现的次数, O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣) 的时间生成哈希表的键,以及 O ( 1 ) O(1) O(1) 的时间更新哈希表,因此总时间复杂度是 O ( n ( k + ∣ Σ ∣ ) ) O(n(k+|\Sigma|)) O(n(k+∣Σ∣))

空间复杂度: O ( n ( k + ∣ Σ ∣ ) ) O(n(k+|\Sigma|)) O(n(k+∣Σ∣))

在这里插入图片描述

相关文章:

LeetCode 49 字母异位词分组

LeetCode 49 字母异位词分组 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/group-anagrams/description/ 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给你一个字符串数组&#x…...

( 链表) 142. 环形链表 II——【Leetcode每日一题】

❓142. 环形链表 II 难度&#xff1a;中等 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定…...

论文解读 | 基于改进点对特征的点云6D姿态估计

原创 | 文 BFT机器人 01 摘要 点对特征(PPF)方法已被证明是一种有效的杂波和遮挡下的姿态估计方法。 文章的改进方法主要包括: (1)一种基于奇偶规则求解封闭几何的法向的方法; (2)通过将体素网格划分为等效角度单元的有效降采样方法; (3)基于拟合点的验证步骤。在真实杂波数据集…...

Shell脚本while循环语句应用

记录&#xff1a;433 场景&#xff1a;Shell脚本while循环语句应用。Shell脚本while循环语句应用。while do done、while : do done、while true do done。 版本&#xff1a;CentOS Linux release 7.9.2009。 1.while常用格式 1.1格式一&#xff1a;while do done while c…...

Kubernetes Dashboard + Ingress 及其 yaml 文件分析

概述 记录部署Dashboard Ingress的具体过程及其 yaml 文件分析 Dashboard Yaml # Copyright 2017 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the Li…...

【SpringCloud组件——Nacos】

前置准备&#xff1a; 分别提供订单系统&#xff08;OrderService&#xff09;和用户系统&#xff08;UserService&#xff09;。订单系统主要负责订单相关信息的处理&#xff0c;用户系统主要负责用户相关信息的处理。 一、服务注册与发现 1.1、在父工程当中引入Nacos依赖 …...

pinia状态管理 用法

Pinia是一个用于vue的状态管理库&#xff0c;类似于vuex,是vue的另一种状态管理工具。 Pinia 是 Vue 的存储库&#xff0c;它允许跨组件/页面共享状态。实际上&#xff0c;Pinia就是Vuex的升级版&#xff0c;官网也说过&#xff0c;为了尊重原作者&#xff0c;所以取名pinia&am…...

Oracle客户端版本安装

一、版本准备 Oracle版本下载官网&#xff1a;Instant Client for Linux x86-64 (64-bit) | Oracle 中国 进入网站下载对应的oracle版本&#xff0c;通常环境所用的包有&#xff1a;basic、sdk、sdkplus三个包。包的类型分为rpm和zip包&#xff0c;均可以下载&#xff0c;当前…...

基于Android studio二手车交易系统app

客户端&#xff1a; 用户注册&#xff1a;通过输入用户名&#xff0c;密码&#xff0c;所在地&#xff0c;联系地址以及电话和电子邮件等信息进行用户信息的注册。 二手车查看&#xff1a;用户注册登录系统后&#xff0c;可以查看二手车的基本信息&#xff0c;通过二手车的品牌…...

【LCD应用编程】绘制点、线、矩形框

之前获取LCD屏幕参数信息时了解到&#xff0c;LCD屏是 FrameBuffer 设备&#xff0c;操作 FrameBuffer 设备 其实就是在读写 /dev/fb0 文件。除此之外&#xff0c;LCD屏上包含多个像素点&#xff0c;绘制点、线、矩形框本质是在修改这些像素点的颜色。 目录 1、定义 lcd_color…...

第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的IR值&#xff0c;第二个值是实时的心跳&#xff0c;第三个值是平均心跳&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;MAX30102心率传感器的外观如下…...

【MySQL】MySQL主从同步延迟原因与解决方案

文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题&#xff1a;3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;…...

学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a;学C的第二十一天【初阶测评讲解&#xff1a;1. 计算递归了几次&#xff1b;2. 判断 do while 循环执行了几次&#xff1b;3. 求输入的两个数的最小公倍数&#xff1b;4. 将一句话的单词进…...

测试计划模板一

测试计划 修订历史记录 版本        日期       AMD       修订者      说明      1.0 XXXX年XX月XX (A-添加,M-修改,D-删除) 目录 1. 简介.. 4 1. 1目的... 4 1. 2背景... 4...

【利用AI让知识体系化】5种创建型模式

文章目录 创建型模式简介工厂模式抽象工厂模式单例模式建造者模式原型模式 创建型模式 简介 创建型模式&#xff0c;顾名思义&#xff0c;是用来创建对象的模式。在软件开发中&#xff0c;对象的创建往往比一般的编程任务更为复杂&#xff0c;可能涉及到一些琐碎、复杂的过程…...

Unity的UnityStats: 属性详解与实用案例

UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具&#xff0c;它提供了一系列的属性值&#xff0c;可以帮助开发者解游戏的运行情况&#xff0c;从而进行优化。本文将详细介绍 UnityStats 的每个属性值&#xff0c;并提供多个使用例子帮助开发者…...

TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空&#xff0c;直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp&#xff0c;6060/tcp&#xff0c;…...

Android 12.0无源码apk设置默认启动Launcher的相关属性

1.概述 在12.0的系统产品开发中,对于一些产品的需求,需要将一些无源码app的某个MainActivity作为启动Launcher页面的功能实现,由于没有源码,所以需要 利用PMS的安装解析apk的AndroidManifest.xml的时候,在判断是某个Activity的时候,设置Lancher属性来实现某些功能 2.无源…...

js深拷贝和浅拷贝

&#x1f449;十分钟学会 前端面试题 js 深拷贝与浅拷贝_前端深拷贝和浅拷贝面试题_Mar-30的博客-CSDN博客 目录 背景&#xff1a; 概念&#xff1a;核心是创建新地址 方法&#xff1a; 浅拷贝&#xff1a; Object.assign() 方法&#xff1a;Object.assign(拷贝的对象&am…...

CANopenNode Master 配置

文章目录 CANopenNode 简介CANopenNode 主栈SDO ClientPDO 通讯参数RPDO 通讯参数RPDO 通信参数设置实例TPDO 通讯参数TPDO 通信参数设置实例 PDO 映射参数RPDO 映射参数设置实例TPDO 映射参数设置实例 CANopenNode 简介 CANopenNode 是一个开源的免费的开源 CANopen 协议栈。…...

IP离线库每周更新一次够用吗?企业风控建议多久更新?

在风控体系中&#xff0c;IP数据的时效性直接决定了拦截效果。当攻击者使用秒拨IP或住宅代理发起攻击时&#xff0c;IP地址的轮换速度可以达到分钟级。如果依赖的IP库更新周期过长&#xff0c;就等于在防御上留下了数天的空窗期。 周更不够用。秒拨IP平均存活3-5分钟&#xff…...

Spring Boot 3.x面试全攻略:自动配置+事务+AOT,2026最新考点

文章目录一、开场&#xff1a;Spring Boot面试&#xff0c;你真的准备好了吗&#xff1f;二、自动配置&#xff1a;从"黑魔法"到"透明厨房"2.1 面试第一问&#xff1a;自动配置到底咋实现的&#xff1f;2.2 3.5版本新考点&#xff1a;TaskExecutor名称变更…...

LabVIEW视觉项目效率翻倍:海康相机+OpenCV/NI Vision混合编程实战

LabVIEW视觉项目效率翻倍&#xff1a;海康相机OpenCV/NI Vision混合编程实战 在工业自动化领域&#xff0c;视觉检测系统的开发效率往往决定了产品上市时间。作为一名长期奋战在产线调试一线的工程师&#xff0c;我发现许多同行在使用LabVIEW进行视觉项目开发时&#xff0c;都会…...

Qwen3.5-9B教程:Gradio队列机制+并发请求限流配置方法

Qwen3.5-9B教程&#xff1a;Gradio队列机制并发请求限流配置方法 1. 模型概述与环境准备 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。其多模态变体Qwen3.5-9B-VL支持图文输入&#xff0c;并能处理长达128K token…...

避坑指南:海康摄像头WS流接入H5播放器的那些‘坑’与最佳实践

海康摄像头WS流H5播放器实战&#xff1a;从协议解析到高可用架构设计 当监控视频流需要跨越浏览器边界时&#xff0c;技术挑战往往接踵而至。最近在金融园区项目中&#xff0c;我们通过H5播放器接入海康威视WS协议流时&#xff0c;发现看似简单的视频播放背后隐藏着协议兼容、网…...

Jetson Nano/Orin上离线语音识别的实战踩坑:从Whisper到Sherpa-onnx,我最终选了它

Jetson Nano/Orin离线语音识别实战&#xff1a;从Whisper到Sherpa-onnx的技术选型与避坑指南 在边缘计算设备上实现高质量的离线语音识别&#xff08;ASR&#xff09;一直是开发者面临的挑战。Jetson系列作为NVIDIA推出的边缘AI计算平台&#xff0c;凭借其强大的GPU加速能力和低…...

PlugY:重塑暗黑破坏神2单机体验的技术突破

PlugY&#xff1a;重塑暗黑破坏神2单机体验的技术突破 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 一、问题篇&#xff1a;暗黑破坏神2单机模式的技术痛点 作为一…...

卫生经济学中模型搭建与分析的奇妙之旅

马尔可夫模型&#xff0c;马科夫模型&#xff0c;Markov Model搭建&#xff0c;决策树模型 卫生经济学&#xff0c;药物经济学评价&#xff0c;成本效果分析&#xff0c;成本效益分析&#xff0c;成本效用分析&#xff0c;CEA&#xff0c;health economics&#xff0c;pharmaco…...

Midscene.js:重塑UI自动化的革命性AI视觉驱动方案

Midscene.js&#xff1a;重塑UI自动化的革命性AI视觉驱动方案 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否曾为编写复杂的UI自动化脚本而头疼&#xff…...

用Manim做中文数学微课?先搞定MathTex颜色分染和ctex包配置(保姆级教程)

Manim中文数学微课实战&#xff1a;从零实现公式染色与中文混排 当你在B站刷到那些将复杂数学公式演绎成动画的艺术品时&#xff0c;是否好奇过它们是如何制作的&#xff1f;作为教育视频创作者&#xff0c;我最初被Manim的数学可视化能力吸引&#xff0c;却在尝试制作中文微课…...