Leetcode刷题【hot100】字母异位词分组

news/2024/10/29 2:28:22/

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

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

示例 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] 仅包含小写字母

方法一:排序

首先,满足字母异位词的前提是字母数量相同且使用的字母相同。那么我们可以采用对字母排序的方式将字母异位词筛选出来,然后将对应的string值放在同一个list中

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> map = new HashMap<String,List<String>>();for(String str:strs){//转化成字符数组char[] array = str.toCharArray();//对数组进行排序Arrays.sort(array);String key = new String(array);//从哈希表中获取排序后为key的数组,如果不存在则返回一个新的listList<String> list = map.getOrDefault(key,new ArrayList<String>());//将该str添加到对应的list中list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}

方法二:计数 

原理和第一个大体相同,字母异位词使用的字母相同且每个字母使用的次数也相同,这次我们字母和将字母的使用次数当作hash表的key值。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> map = new HashMap<String,List<String>>();for(String str:strs){int[] counts = new int[26];int len = str.length();for(int i=0;i<len;i++){//对该字符的使用次数进行计算counts[str.charAt(i)-'a']++;}//拼装keyStringBuffer sb = new StringBuffer();for(int i=0;i<26;i++){if(counts[i]!=0){//得到使用到的字符sb.append((char)(i+'a'));sb.append(counts[i]);}}String key = sb.toString();List<String> list = map.getOrDefault(key,new ArrayList<String>());list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}


http://www.ppmy.cn/news/1201491.html

相关文章

Mysql数据库 9.SQL语言 查询语句 连接查询、子查询

连接查询 通过查询多张表&#xff0c;用连接查询进行多表联合查询 关键字&#xff1a;inner join 内连接 left join 左连接 right join 右连接 数据准备 创建新的数据库&#xff1a;create database 数据库名; create database db_test2; 使用数据库&#xff1a;use 数据…

钉钉企业微应用开发C#+VUE

钉钉相信很多人都用过或听过&#xff0c;企业OA审批&#xff0c;考勤&#xff0c;沟通方方面面都支持。但是有的需求自定义表单的无法满足&#xff0c;例如带有业务特性的数据来源&#xff0c;可能是内部其他系统&#xff0c;以及数据筛选分析没有那么方便&#xff0c;钉钉官方…

OpenAI 年度大戏即将揭晓,5 大剧透全方位曝光

北京时间 11 月 7 日凌晨 2 点&#xff0c;2023 年度最受关注的 AI 活动 OpenAI DevDay 将正式揭晓。2022 年 11 月&#xff0c;OpenAI 正式发布了 ChatGPT&#xff0c;这个改变整个 AI 发展进程和轨迹的颠覆性产品。OpenAI 选择在 ChatGPT 发布一周年之际举行这次活动&#xf…

【UDS基础】简单介绍“统一诊断服务“

1. 前言 我们将在这个实用教程中介绍UDS的基础知识,重点关注在CAN总线上的UDS(UDSonCAN)和CAN诊断(DoCAN)。此外,我们还会介绍ISO-TP协议,并解释UDS、OBD2、WWH-OBD和OBDonUDS之间的差异。 最后,我们将解释如何请求、记录和解码UDS消息,并提供一些实际示例,例如记录…

k8s开放接口

开放接口 Kubernetes 作为云原生应用的基础调度平台,相当于云原生的操作系统,为了便于系统的扩展,Kubernetes 中开放的以下接口,可以分别对接不同的后端,来实现自己的业务逻辑: 容器运行时接口(CRI):提供计算资源容器网络接口(CNI):提供网络资源容器存储接口(CSI…

CSS示例001:鼠标放div上,实现旋转、放大、移动等效果

GPT能够很好的应用到我们的代码开发中&#xff0c;能够提高开发速度。你可以利用其代码&#xff0c;做出一定的更改&#xff0c;然后实现效能。 css实战中&#xff0c;经常会看到这样的场景&#xff0c;鼠标放到一个图片或者一个div块状时候&#xff0c;会出现旋转、放大、移动…

数据分析相关知识整理_--秋招面试版

一、关于sql语句(常问&#xff09; 1&#xff09;sql写过的复杂的运算 聚合函数&#xff0c;case when then end语句进行条件运算&#xff0c;字符串的截取、替换&#xff0c;日期的运算&#xff0c;排名等等&#xff1b;行列转换&#xff1b; eg&#xff1a;行列转换 SELE…

Pytorch里面参数更新前为什么要梯度手动置为0?

因为在一般情况下&#xff0c;每次minibatch之后&#xff0c;都会计算得到一个loss&#xff0c;进而计算该loss关于全局参数的梯度。如果在下一次minibatch 进入模型&#xff0c;计算得到相应的loss和梯度之前&#xff0c;不对优化器的梯度进行置0操作&#xff0c;那么几次batc…