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

leetcode49.字母异位词分组

一、题目描述

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

示例 1:

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

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

解释:

在 strs 中没有字符串可以通过重新排列来形成 “bat”。
字符串 “nat” 和 “tan” 是字母异位词,因为它们可以重新排列以形成彼此。
字符串 “ate” ,“eat” 和 “tea” 是字母异位词,因为它们可以重新排列以形成彼此。
示例 2:

输入: strs = [“”]

输出: [[“”]]

示例 3:

输入: strs = [“a”]

输出: [[“a”]]

提示:

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

二、题目解析

1、全部异位词共性:排序后唯一,可以此作为map的key,此key下的全部异位词组成list

class Solution {public List<List<String>> groupAnagrams(String[] strs) {if(strs == null || strs.length == 0){return null;}HashMap<String,List<String>> map = new HashMap<>();for(int i = 0;i < strs.length;i++){String curKey = sortString(strs[i]);if(!map.containsKey(curKey)){List<String> curList = new ArrayList<>();curList.add(strs[i]);map.put(curKey,curList);}else{List<String> curList = map.get(curKey);curList.add(strs[i]);map.put(curKey,curList);}}List<List<String>> res = new ArrayList<>();for(Map.Entry<String,List<String>> entry : map.entrySet()){List<String> cur = entry.getValue();res.add(cur);}return res;}public String sortString(String s){char[] chs = s.toCharArray();Arrays.sort(chs);return new String(chs);}
}

运行:

2、在1的基础上优化

  • map.getOrDefault可代替if-else结构,简化代码
  • map.values()可把map的全部值快速提取转换成list
    • new ArrayList<>(sourceMap.values())
    • new HashSet<>(sourceMap.values());
  • String.valueOf()可支持将基本数据类型,char数组,object对象转换成字符串
    简化代码如下:
class Solution {public List<List<String>> groupAnagrams(String[] strs) {if(strs == null || strs.length == 0){return null;}HashMap<String,List<String>> map = new HashMap<>();for(int i = 0;i < strs.length;i++){String curKey = sortString(strs[i]);List<String> curList = map.getOrDefault(curKey,new ArrayList<String>());curList.add(strs[i]);map.put(curKey,curList);}return new ArrayList<List<String>>(map.values());}public String sortString(String s){char[] chs = s.toCharArray();Arrays.sort(chs);return String.valueOf(chs);}
}

在这里插入图片描述

http://www.dtcms.com/a/327222.html

相关文章:

  • NLP—词向量转换评论学习项目分析真实案例
  • 本地(macOS)和服务器时间不同步导致的 Bug排查及解决
  • linux 执行ls命令文件夹显示全白色
  • 微前端架构:原理、场景与实践案例
  • Rust 性能提升“最后一公里”:详解 Profiling 瓶颈定位与优化|得物技术
  • 计算机视觉(6)-自动驾驶感知方案对比
  • 使用 NetBird 创建安全的私有网络,简化远程连接!
  • Golang 语言中 Context 的使用方式
  • Rust学习笔记(二)|变量、函数与控制流
  • 【七指共振擒牛战法】副图+选股指标——多维度捕捉主升浪的量化交易利器
  • 智慧校园|智慧校园管理小程序|基于微信小程序的智慧校园管理系统设计与实现(源码+数据库+文档)
  • [Robotics_py] 定位滤波器 | 预测与更新 | 扩展卡尔曼滤波器(`EKF`)
  • Linux操作系统应用软件编程——标准IO
  • Java Stream ReduceOps
  • 负载均衡详解
  • 小程序排名优化:用户行为数据背后的提升密码
  • PostgreSQL 范围、空间唯一性约束
  • 「ECG信号处理——(23)基于ECG和PPG信号的血压预测」2025年8月12日
  • SQL 生成日期与产品的所有组合:CROSS JOIN(笛卡尔积)
  • Linux 系统运维、网络、SQL Server常用命令
  • 机器学习 [白板推导](九)[变分推断]
  • DRAM、SRAM、NAND Flash、NOR Flash、EEPROM、MRAM存储器你分得清吗?
  • 用pom文件从nexus3拉依赖,无法拉取的一个问题
  • 逻辑删除 vs 物理删除:MyBatis-Plus 实现指南与实践
  • 可泛化逻辑推理Python编程作为医疗AI发展方向研究
  • 关于数据库的restful api接口工具SqlRest的使用
  • 如何在 Ubuntu 24.04 LTS Linux 中安装 JSON Server
  • 2025年国赛新规解读:8-12最新发布文件
  • 初识数据结构——优先级队列(堆!堆!堆!)
  • 偶遇冰狐智能辅助的录音