hot100 -字母异位词分组

题目介绍

给定一个字符串数组,要求将其中的字母异位词组合在一起,并可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

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

示例 2:

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

理解

字母异位词是指拥有相同字符,但排列不同的单词。例如,“eat”、“tea” 和 “ate” 是字母异位词。题目要求我们将这些字母异位词分组。

思路

一种有效的方法是使用哈希表。对于每个单词,我们可以将其排序,得到一个规范形式。具有相同规范形式的单词即为字母异位词。我们可以使用哈希表来存储这些分组。
规范:将字母进行排序,然后排序后的作为key,如果单词排序后的结果已存在,则加入对应位置的列表中

解法

  1. 创建一个哈希表,用于存储字母异位词分组。
  2. 遍历输入的字符串数组。
  3. 对每个单词进行排序,得到规范形式。
  4. 将规范形式作为哈希表的键,将当前单词加入对应的值列表中。
  5. 最终,哈希表的值就是字母异位词分组。

具体代码

下面是用 Java 实现的代码:

public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> result = new ArrayList<>();Map<String, List<String>> hash = new HashMap<>();for (String str : strs) {String key = sort(str);hash.computeIfAbsent(key, k -> new ArrayList<>()).add(str);}result.addAll(hash.values());return result;}public String sort(String str) {char[] charArray = str.toCharArray();Arrays.sort(charArray);return Arrays.toString(charArray);}

拓展:

computeIfAbsent 是 Java 中 Map 接口新增的一个方法,它的作用是在指定的键不存在或对应的值为 null 时,使用提供的函数计算新值并放入 Map。如果键已经存在,那么不会进行计算,直接返回当前值

  • 存在:直接返回key对应的value
    • 例如:"bca"排序后的规范"abc"存在,则返回对应规范的value,这里是对应的list
  • 不存在:执行后面的lambda函数,返回value
    • 例如:"bca"排序后的规范"abc"不存在,则执行对应的函数k -> new ArrayList<>()将key添加到hashmap,value为创建的arraylist

下面是 computeIfAbsent 方法的签名:

V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

其中,key 是要检查的键,mappingFunction 是一个用于计算新值的函数。如果键存在,该函数不会执行;如果键不存在或对应的值为 null,则会执行函数计算新值并将其放入 Map 中。

在上述代码中,我们使用 computeIfAbsent 来处理字母异位词的分组。具体来说,当规范形式(排序后的单词)作为键不存在时,我们创建一个新的值列表,并将当前单词加入该列表;如果键已经存在,说明已经有字母异位词的分组,直接将当前单词加入对应的值列表中。

这个方法简化了我们对哈希表的操作,使得代码更为清晰和简洁。

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

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

相关文章

WPF的ViewBox控件

在WPF中&#xff0c;ViewBox是一个用于缩放和调整其子元素大小的容器控件。它可以根据可用空间自动调整子元素的大小&#xff0c;以使其适应ViewBox的边界。这使得在不同尺寸的窗口或布局中保持元素的比例和缩放变得更加容易。 ViewBox具有以下重要属性&#xff1a; Stretch&…

基于Python flask MySQL 猫眼电影可视化系统设计与实现

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…

【Linux 内核源码分析】多核调度分析

多核调度 SMP&#xff08;Symmetric Multiprocessing&#xff0c;对称多处理&#xff09;是一种常见的多核处理器架构。它将多个处理器集成到一个计算机系统中&#xff0c;并通过共享系统总线和内存子系统来实现处理器之间的通信。 首先&#xff0c;SMP架构将一组处理器集中在…

程序员的基本素养之——R语言起源、特点以及应用

R语言是一种功能强大的数据分析、统计建模、可视化、 免费、开源且跨平台的编程语言 作为用于数据统计的必备技能语言&#xff0c;博主目前正在对R语言进行基本的学习&#xff0c;这也是生物信息学领域进行统计分析的必备语言之一。下面跟我来一起看看吧&#xff01; R语言是一…

鸿蒙自定义Http网络访问组件

前言 DevEco Studio版本:4.0.0.600 使用效果 如何使用 参考文档:OpenHarmony http数据请求 1、module创建 File-->New-->Module,选择Static Library 2、相关类创建 HttpCore:Http的核心类,用于http的请求 RequestMethod:http请求的类型,包含:GET、POST等 …

基本数据类型细节【java】

整形细节 1.java个整数类型有固定的范围和字段长度&#xff0c;不受具体OS【操作系统】的影响&#xff0c;以保证java程序的移植性 2.java的整型常量默认为int型&#xff0c;声明long型常量须在后面加l或者L int n1 1;//4个字节 //int n2 1L;//不对 long n3 1L; //对 3.J…

你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型

3.3 数值数据类型 从每天早上睁开眼睛的那一刻开始&#xff0c;我们几乎每时每刻都在与数字打交道&#xff1a;从闹钟上的6点30分&#xff0c;到上班坐的216路公共汽车&#xff1b;从 新闻中说的房价跌到了100元每平米到回家买菜时的西红柿3.5元一斤。我们生活在一个充满数字的…

个性化联邦学习所面临的挑战:

个性化联邦学习所面临的挑战&#xff1a; 1、Federated Learning with Personalization Layers Li等人(2019)最近发表的综述文章阐述了联邦学习系统面临的许多独特挑战。其中一个挑战是&#xff0c;不同客户端的有效数据分布可能在参与的设备之间(可能有数百万台)差异很大。这…

04.领域驱动设计:了解聚合和聚合根,怎样设计聚合

目录 1、概述 2、聚合 3、聚合根 4、怎么设计聚合 4.1 聚合的构建过程主要步骤 第 1 步&#xff1a;采用事件风暴。 第 2 步&#xff1a;选出聚合根。 第 3 步&#xff1a;找出与聚合根关联的所有紧密依赖的实体和值对象。 第 4 步&#xff1a;画出对象的引用和依赖模型…

强缓存与协商缓存、缓存失效的问题、缓存nginx配置、缓存存在哪里

前端缓存&#xff0c;这是一个老生常谈的话题&#xff0c;也常被作为前端面试的一个知识点。今天我们来总结一下。 分类&#xff1a;前端缓存分为强缓存和协商缓存两种。 强缓存 强缓存主要使用 Expires、Cache-Control 两个头字段&#xff0c;两者同时存在 Cache-Control 优…

P2246 SAC#1 - Hello World(升级版)

网址如下&#xff1a; P2246 SAC#1 - Hello World&#xff08;升级版&#xff09; - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 刚开始是用递归做的&#xff0c;虽然用了哈希表优化&#xff0c;但是超时&#xff0c;只得了50 后面想到了一个新的算法&#xff0c;时间复杂度…

喝酒筛子小游戏集合源码微信小程序喝酒骰子程序带流量主版本源码酒桌玩筛子源码

2023新版酒桌小游戏喝酒小程序源码-&#xff08;流量主版本&#xff09; 修改增加了广告位 根据文档直接替换&#xff0c;原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可 无广告引流 流量主版…

3338 蓝桥杯 wyz的数组IV 简单

3338 蓝桥杯 wyz的数组IV 简单 //C风格解法1&#xff0c;通过率50% #include<bits/stdc.h>int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int n; std::cin >> n;int ans 0;std::vector<int>a(n);for(auto &am…

深入探究C语言中的常量指针与野指针概念及其应用

目录 常量指针&#xff08;Constant Pointers&#xff09; 1. 指向常量的指针 2. 常量指针 以下是一个使用const声明常量的示例&#xff1a; 通过修改被const修饰的a的地址&#xff0c;修改a的值 const位置的不同 指针的应用 利用指针打印数组的几种方式 野指针&#x…

必应聊天在当前安全搜索设置下不可用

使用Bing必应搜索引擎&#xff0c;想用必应AI聊天功能会提示&#xff1a;必应聊天在当前安全搜索设置下不可用。 当安全搜索设置设置为“严格”时&#xff0c;不支持必应聊天。 那么怎么修改安全搜索设置呢&#xff1f; 点击右上角的菜单图标&#xff0c;在下拉菜单里点击安全…

权威的健康养生与医学基础知识科普学习信息汇总

目录 1 关于健康与食物营养的权威网址1.1 世界卫生组织&#xff08;World Health Organization: WHO&#xff09;1.2 美国国家卫生研究院 (National Institutes of Health: NIH)1.3 澳大利亚政府健康门户 (Healthdirect)1.4 国际食品信息委员会 (International Food Informatio…

存量为王,持牌消金押注MGM获客

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 存量&#xff0c;已成为消费金融公司运营的王道。 行业十年扩张&#xff0c;跑马圈地难以为继&#xff0c;取而代之的则是一场刀刃向内的运营变革。特别是近几年&#xff0c;消金公司不约而同地将目光聚焦到存量盘活&a…

【Midjourney】内容展示风格关键词

1.几何排列(Geometric) "Geometric" 是一个与几何有关的词汇&#xff0c;通常用于描述与形状、结构或空间几何特征相关的事物。这个词可以涉及数学、艺术、工程、计算机图形学等多个领域。 使用该关键词后&#xff0c;图片中的内容会以平面图形拼接的方式展示&#…

Apache Shiro <= 1.2.4反序列化漏洞攻击 CVE-2016-4437 已亲自复现

Apache Shiro < 1.2.4反序列化漏洞攻击 CVE-2016-4437 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 在 1.2.5 之前的 Apache Shiro 中&#xff0c;当未为“记住我”功能配置密钥时&#xff0c;远程攻击者可以通过未指定…

Spring Retry机制详解

介绍 Spring框架提供了Spring Retry能让在项目工程中很方便的使用重试。 使用 1、引入pom <dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.3.2</version></depen…