LeetCode刷题之HOT100之字母异位词分组

中午没有回宿舍午休,每次回去都没睡着,我想就没有必要回去了。京东买的书今天还没到,提前把题做了好专心做开发任务。

1、题目描述

在这里插入图片描述

2、逻辑分析

我看了几分钟,有点理解不了这道题需求是什么。看看题解。看了才理解题目的意思。字母异位词:两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。
解题步骤:同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的标志,哈希表的值为一组字母异位词列表。

3、代码演示

public List<List<String>> groupAnagrams(String[] strs) {
        // 创建一个HashMap,用于存储字母异位词(anagrams)的分组  
        // 键是排序后的字符串(代表一种字母组合),值是该组合对应的所有原始字符串列表
        Map<String, List<String>> map = new HashMap<>();
        // 遍历输入的字符串数组
        for(String str: strs){
             // 将当前字符串转换为字符数组 
            char[] arr = str.toCharArray();
            // 对字符数组进行排序,以消除字符的顺序差异 
            Arrays.sort(arr);
            // 将排序后的字符数组转换回字符串,作为HashMap的键
            String key = new String(arr);
            // 从HashMap中获取与当前键关联的列表(如果不存在则返回一个空列表)
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将当前原始字符串添加到列表中
            list.add(str);
            // 将更新后的列表重新放回HashMap中
            map.put(key, list);
        }
        // 将HashMap中所有的值(即所有的字符串列表)转换为一个新的ArrayList并返回  
        // 这样就得到了按字母异位词分组的结果 
        return new ArrayList<List<String>>(map.values());
    }

我将在IDE中运行代码放过来,可以打断点来一步步看怎么计算的。

package LeetCode;
import java.util.*;
public class groupAnagrams {
    public static void main(String[] args) {
        String[] strs = {"eat","tea","tan","ate","nat","bat"};
        List<List<String>> result = groupAnagrams(strs);
        for (List<String> value : result) {
            System.out.println(value);
        }
    }
    public static List<List<String>> groupAnagrams(String[] strs) {
        // 创建一个HashMap,用于存储字母异位词(anagrams)的分组
        // 键是排序后的字符串(代表一种字母组合),值是该组合对应的所有原始字符串列表
        Map<String, List<String>> map = new HashMap<>();
        // 遍历输入的字符串数组
        for(String str: strs){
            // 将当前字符串转换为字符数组
            char[] arr = str.toCharArray();
            // 对字符数组进行排序,以消除字符的顺序差异
            Arrays.sort(arr);
            // 将排序后的字符数组转换回字符串,作为HashMap的键
            String key = new String(arr);
            // 从HashMap中获取与当前键关联的列表(如果不存在则返回一个空列表)
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将当前原始字符串添加到列表中
            list.add(str);
            // 将更新后的列表重新放回HashMap中
            map.put(key, list);
        }
        // 将HashMap中所有的值(即所有的字符串列表)转换为一个新的ArrayList并返回
        // 这样就得到了按字母异位词分组的结果
        return new ArrayList<List<String>>(map.values());
    }
}

在这里插入图片描述
ok,第二种方法就不看啦,做其他事情去咯,再见!

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

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

相关文章

Java编程常见问题汇总四

系列文章目录 文章目录 系列文章目录前言一、忽略所有异常二、重复包装RuntimeException三、不正确的传播异常四、用日志记录异常五、异常处理不彻底 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

设计循环队列---力扣622

1、题目 1.1基础设置与讲解 循环队列&#xff0c;即固定长度的队列&#xff0c;可以想象成一个环形队列 就类似于这种队列&#xff0c;队尾指针后会有一个空位&#xff0c;用于控制判断队列为空还是为满&#xff1b; typedef int MyDataType;typedef struct {MyDataType fron…

弘君资本炒股开户:如何看待股价波动?

在股票商场上股价的动摇无疑是投资者最为关心的话题之一&#xff0c;面临股价的起伏不定投资者往往会感到迷茫和焦虑。关于怎么看待股价动摇&#xff0c;弘君资本下面就为大家详细介绍一下。 股价动摇是股市运行的常态&#xff0c;股市是国民经济的晴雨表&#xff0c;股票价格…

03数据卷及其挂载的命令

数据卷(虚拟目录)操作命令 在容器内部修改文件 docker exec -it nginx bash: 进入Nginx容器内部 docker exec: 进入容器内部,容器内部会模拟一份阉割版的Linux文件系统,只包含镜像运行时所需的环境和配置以及文件-it: 给当前进入的容器创建一个标准输入/输出终端方便我们与容…

浏览器阻止屏幕息屏,js阻止浏览器息屏,Web网页阻止息屏

场景: 比如打开一个浏览器页面(比如大屏),想让它一直显示着,而不是过几分钟不操作就屏幕黑了.(电脑有设置电脑不操作就会多长时间就会息屏睡眠,如果要求每个客户都去操作一下电脑设置一下从不睡眠,这很不友好和现实.而且我也只想客户在大屏的时候才这样,其他页面就正常,按电脑设…

HTTPS缺失?如何轻松解决IP地址访问时的“不安全”警告

一、问题现象 如果访问网站时出现以下任何一种情况&#xff0c;则说明该网站需要立即整改&#xff1a; 1.浏览器地址栏那里出现“不安全”字样&#xff1b; 2.小锁标志被红叉&#xff08;&#xff09;、斜线&#xff08;&#xff3c;&#xff09;等标志为不可用&#xff1b;…

二叉树的链式结构(二叉树)与顺序结构(堆)---数据结构

一、树的概念与结构 1、树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。我们常把它叫做树&#xff0c;是因为它看起来像一棵倒挂的树&#xff0c;它的根是朝上的&#xff0c;而叶是朝下的。 下面…

国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上Vim的详解03–使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插…

【GD32H757Z海棠派使用手册】第十一讲 SPI-SPI NOR FLASH读写实验

11.1 实验内容 通过本实验主要学习以下内容&#xff1a; SPI简介 GD32H7 SPI简介 SPI NOR FLASH——GD25Q128ESIGR简介 使用GD32H7 SPI接口实现对GD25Q128ESIGR的读写操作 11.2 实验原理 11.2.1 SPI简介 SPI&#xff08;Serial Peripheral interface&#xff09;&#…

Oracle和mysql中插入时间字段

例如有id 和 times两个字段 Oracle insert into xxx values|(1,sysdate) mysql insert into xxx values(1,now()) 在 MySQL 中&#xff0c;SYSDATE() 函数也是可用的&#xff0c;它与 NOW() 类似&#xff0c;但略有不同&#xff1a; NOW…

pdf文件怎么合并成一个文件

在现代办公环境中&#xff0c;PDF文件的使用已变得非常普遍。它们具有跨平台、易读性强的特点&#xff0c;因此被广泛应用于各种场合。然而&#xff0c;当需要处理大量的PDF文件时&#xff0c;如何有效地将它们合并成一个文件&#xff0c;成为了一个需要解决的问题。本文将详细…

STM 32_HAL_SDIO_SD卡

STM32的SDIO&#xff08;Secure Digital Input Output&#xff09; 接口是一种用于SD卡和MMC卡的高速数据传输接口。它允许STM32微控制器与多种存储卡和外设进行通信&#xff0c;支持多媒体卡&#xff08;MMC卡&#xff09;、SD存储卡、SDI/O卡和CE-ATA设备。STM32的SDIO控制器…

High School Math 2003

高中数学2003&#xff0c;离我远去&#xff0c;有些已经忘记了 2个小时。选择题和填空题答题时间2-4分钟。基础题、应用题大题为10分钟左右&#xff0c;不然肯定就是没时间做完&#xff0c;数学就是考察就是2小时单位时间内完成数量和质量&#xff08;正确率&#xff09;&#…

免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接等

参考: https://310.ai/copilot 可以通过自然语言对话形式实现小分子、蛋白质的相关处理:生成序列、折叠等 应该是agent技术调用不同工具实现 从UniProt数据库中搜索和加载蛋白质。使用ESM Fold方法折叠蛋白质。使用310.ai基础模型设计新蛋白质。使用TM-Align方法比较蛋白质…

真正用AI大模型的人,美国7%,日本1%,中国垫底

AI真实渗透率完整版大揭秘&#xff01;谁能告诉我&#xff0c;为何用的人寥寥无几&#xff1f; ✨ 结论&#xff1a;真正用AI的人&#xff0c;美国7%&#xff0c;日本1%&#xff0c;中国垫底。 &#x1f50d; 你是否以为AI早已无处不在&#xff1f;无所不能&#xff1f;可现实…

国内外低代码平台有哪些 6大热门国内外低代码厂商介绍

低代码开发平台是一种新兴的开发工具&#xff0c;它允许用户通过图形化界面和拖放操作来创建应用程序&#xff0c;而无需编写大量的代码。这种平台的优势在于能够大幅提高开发效率&#xff0c;降低企业成本&#xff0c;并让非技术人员也能够参与到应用开发过程中来。 国内低代码…

WEB攻防- Javascript项目特性- Node.js框架安全-识别审计-验证绕过

1、什么是JS渗透测试&#xff1f; 在Javascript中也存在变量和函数&#xff0c;当存在可控变量及函数调用即可能存在参数漏洞 JS开发的WEB应用和PHP&#xff0c;JAVA,NET等区别在于即使没有源代码&#xff0c;也可以通过浏览器的查看源代码获取真实的点。所以相当于JS开发的WEB…

模块搜索目录

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 当使用import语句导入模块时&#xff0c;默认情况下&#xff0c;会按照以下顺序进行查找。 &#xff08;1&#xff09;在当前目录&#xff08;即执行…

RHCE (Linux进阶) Ubuntu 操作系统安装教程

一、在官网下载iso镜像文件 下载地址&#xff1a; https://cn.ubuntu.com/download/server/step1#downloads&#xff08;下载最新的Ubuntu 20.04 LTS服务器版本&#xff09; 二、VMware安装配置过程 基本安装过程 1、新建虚拟机 2、选择典型即可 3、设置下载好的Ubuntu对应路…

数字展示具有广阔发展空间 市场规模保持增长态势

数字展示具有广阔发展空间 市场规模保持增长态势 数字展示是指以数字图像为核心&#xff0c;将触摸屏、红外线感应器、三维数字图像等相结合的高层次展示行业。与传统展示方式相比&#xff0c;数字展示能够突破时间、空间及形态的局限&#xff0c;将文字、图像等各种信息转化为…