100道面试必会算法-31-字母异位词分组

100道面试必会算法-31-字母异位词分组

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

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

示例 1:

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

示例 2:

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

示例 3:

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

解题思路

遍历字符串数组

strs,对每个字符串进行处理:

  • 将字符串转换为字符数组并进行排序。
  • 将排序后的字符数组转换为字符串,作为键。
  • 将原始字符串作为值,存储在相应键的列表中。

最终将所有的值(即分组好的字母异位词列表)转换为 ArrayList 并返回。

代码

class Solution {// 定义一个方法用于对字符串数组中的字符串进行分组public List<List<String>> groupAnagrams(String[] strs) {// 创建一个新的列表,其中包含根据相同字符组成的字符串对字符串数组进行分组的结果return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str->{// 将字符串转换为字符数组,并对字符数组进行排序char[] array=str.toCharArray();Arrays.sort(array);return new String(array);})).values());}
}
详细步骤
  1. 转换为流

    Arrays.stream(strs)
    

    将字符串数组 strs 转换为一个流(Stream),以便使用流的操作来处理数据。

  2. 分组操作

    Collectors.groupingBy(str -> {char[] array = str.toCharArray();Arrays.sort(array);return new String(array);
    })
    

    使用 Collectors.groupingBy 将字符串按照排序后的字符数组进行分组。具体步骤如下:

    • 将字符串转换为字符数组 char[] array = str.toCharArray();
    • 对字符数组进行排序 Arrays.sort(array);
    • 将排序后的字符数组转换回字符串 return new String(array);,作为分组的键。
  3. 转换为列表

    new ArrayList<>(...values())
    

    最后,将分组后的值(即字母异位词列表)转换为 ArrayList,并返回结果。

优点
  • 简洁性:使用 Java Stream API 和 Collectors 使代码简洁明了。
  • 效率:排序操作的时间复杂度为 O(n log n),遍历和分组操作的时间复杂度为 O(n),总体来说效率较高。
总结

通过对字符串排序并利用 Map 进行分组,巧妙地将字母异位词归为一类。最终,使用 Java Stream API 将结果整理为所需的列表形式,代码简洁高效,适用于大多数情况下的字母异位词分组问题。

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

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

相关文章

HQL面试题练习 —— 向用户推荐好友喜欢的音乐

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;腾讯。 1 题目 现有三张表分别为&#xff1a; 用户关注表 t_follow(user_id,follower_id)记录用户ID及其关注的人ID&#xff0c;请给用户1 推荐他关注的用户喜欢的音乐名称 ------------------------ | user_id | follower…

六月可以闭眼入的宠物空气净化器:希喂、安德迈、霍尼韦尔真实PK

俗话说得好&#xff0c;猫咪一年到头都在掉毛&#xff0c;仿佛它们是四季常在的"蒲公英"&#xff0c;随时随地都在播撒毛发。猫毛不仅遍布它们自己的身体&#xff0c;还可能飘到你的床铺、沙发、衣物上……面对这样的状况&#xff0c;既要应对无处不在的猫毛&#xf…

基于卷积神经网络(CNN)的垃圾分类模型研究

摘要&#xff1a; 随着城市化进程的加快&#xff0c;垃圾问题日益严重。传统的垃圾分类方法存在效率低下、准确率不高等问题。本文提出了一种基于卷积神经网络&#xff08;CNN&#xff09;的垃圾分类模型&#xff0c;该模型能够自动识别并分类不同类型的垃圾。实验表明&#xf…

Kruskal算法求最小生成树

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define MAX 100 #define NO INT_MAX//NO表示没有边&#xff0c;相当于INFtypedef struct Graph {int arcnum;int vexnum;char vextex[MAX][20];int martrix[MAX][MA…

什么无线领夹麦克风音质最好?领夹麦克风品牌排行榜前十名推荐

​在当今的数字化浪潮中&#xff0c;个人声音的传播和记录变得尤为重要。无论是会议中心、教室讲台还是户外探险&#xff0c;无线领夹麦克风以其卓越的便携性和连接稳定性&#xff0c;成为了人们沟通和表达的首选工具。面对市场上琳琅满目的无线麦克风选择&#xff0c;为了帮助…

【Python】使用 SQLObject orm 库快速将接口数据存入数据库

使用 SQLObject orm 库快速将接口数据存入数据库 文章目录 使用 SQLObject orm 库快速将接口数据存入数据库背景orm python 版本都有哪些&#xff1f; SQLObject 简单的使用 背景 因为测试需要&#xff0c;要将百万条数据接口查询数据存入数据库中&#xff0c;为了减少 mysql …

Doris insert into 插入语句执行成功,且select查询成功,返回结果不报错,但查不到该插入数据

问题&#xff1a;Doris insert into 正常执行成功&#xff0c;select 查询也执行成功&#xff0c;但查不到该写入数据 原因&#xff1a;由于有其他 insert commit 事务待提交且该任务处于锁的状态&#xff0c;导致不断在回滚&#xff0c;进而造成其他的insert into 语句也执行成…

26 - 超过5名学生的课(高频 SQL 50 题基础版)

26 - 超过5名学生的课 select class fromCourses group byclass havingcount(*)>5;

Seed-TTS语音编辑有多强?对比实测结果让你惊叹!

GLM-4-9B 开源系列模型 前言 就在最近&#xff0c;ByteDance的研究人员最近推出了一系列名为Seed-TTS的大规模自回归文本转语音(TTS)模型,能够合成几乎与人类语音无法区分的高质量语音。那么Seed-TTS的表现究竟有多强呢?让我们一起来感受下Seed-TTS带来的惊喜吧! 介绍Seed-TTS…

Java并发包中的锁升级

在Java中&#xff0c;特别是ReentrantLock和synchronized关键字的实现中&#xff0c;锁的升级通常涉及到从无锁状态到偏向锁、再升级到轻量级锁&#xff0c;最后可能升级到重量级锁的过程。这一系列过程是为了减少锁带来的开销&#xff0c;提高并发效率。 偏向锁&#xff08;Bi…

如何用手写代码实现JavaScript中的reduce函数?

在JavaScript中&#xff0c;Array.prototype.reduce() 是一个内置方法&#xff0c;它遍历数组中的每个元素&#xff0c;并将它们累积成一个单一的返回值。我们可以自己编写一个类似的函数来模拟这个过程。 下面是一个简单的手写实现例子&#xff1a; function myReduce(arr, …

组装服务器重装linux系统【idrac集成戴尔远程控制卡】

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Vue 跨平台性能优化十法

Vue.js 开发能够同时运行在不同平台&#xff08;如 Web、移动平台和桌面平台&#xff09;的应用程序。以下是一些常见的跨平台解决方案&#xff1a; 1. 使用 Vue.js 官方发布的框架&#xff1a; Vue.js&#xff1a;主要用于 Web 开发。 Vue Native&#xff1a;使用 Vue 语法开…

数据结构 | 超详细讲解七大排序(C语言实现,含动图,多方法!)

目录 ​编辑 排序的概念 常见排序算法 ​编辑 1.冒泡排序 &#x1f379;图解 &#x1f973;代码实现 &#x1f914;时间复杂度 2.插入排序 &#x1f379;图解 &#x1f334;深度剖析 &#x1f34e;代码思路 &#x1f973;代码实现 &#x1f914;时间复杂度 3.希尔…

2024 年适用于 Linux 的 5 个微软 Word 替代品

对于那些最近由于隐私问题或其他原因而转向 Linux 的用户来说&#xff0c;可能很难替换他们最喜欢的、不在 Linux 操作系统上运行的应用程序。 寻找流行程序的合适替代品可能会成为一项挑战&#xff0c;而且并不是每个人都准备好花费大量时间来尝试弄清楚什么可以与他们在 Win…

读书笔记|《把自己变成稀缺资产》:我们都拥有100分的欲望,却只有1分的耐心。

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 最近在读一本书《把自己变成稀缺资产》&#xff0c;其中一章讲到耐心的重要性&#xff0c;很有共鸣。 当今社会&#xff0c;生活节奏越来越快&#xff0c;我们都在急于求成的追求结果&#xff0c;对过程越来越缺乏耐…

C++核心编程友元的应用

文章目录 1.友元1.什么是友元2.全局函数做友元2.类做友元3.成员函数做友元 1.友元 1.什么是友元 在C中&#xff0c;友元&#xff08;friend&#xff09;是一种允许一个类或函数访问另一个类的非公有&#xff08;private 或 protected&#xff09;成员的机制。这种机制打破了类…

系统研发安全漏洞

软件安全漏洞指的是软件中存在的具体缺陷或疏忽&#xff0c;这些缺陷或疏忽能够被攻击者利用并执行一些恶意行为。这些行为包括但不限于泄露或修改敏感信息、干扰或销毁系统、接管计算机系统或程序权限等。与大众熟悉的软件缺陷&#xff08;Bug&#xff09;相比&#xff0c;安全…

Mysql中表的常用约束

在MySQL表中常用的约束有以下几种&#xff1a; 1. 主键约束&#xff08;Primary Key Constraint&#xff09;&#xff1a;用于标识表中的唯一记录。一个表只能有一个主键&#xff0c;主键列不能有重复值&#xff0c;也不能为NULL。 2. 唯一约束&#xff08;Unique Constraint…

2024050402-重学 Java 设计模式《实战责任链模式》

重学 Java 设计模式&#xff1a;实战责任链模式「模拟618电商大促期间&#xff0c;项目上线流程多级负责人审批场景」 一、前言 场地和场景的重要性 射击&#x1f3f9;需要去靶场学习、滑雪&#x1f3c2;需要去雪场体验、开车&#x1f697;需要能上路实践&#xff0c;而编程…