LeetCode hto100——字母异位词分组

题目

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

示例 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 <= strsi.length <= 100

strsi 仅包含小写字母


题解

复制代码
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);
            List<String> list = map.getOrDefault(key,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

思路

  1. 将字符串中的字符进行排序。因为异位词包含的字母及数量完全相同,所以排序后的结果一定一致(例如 "eat" 和 "tea" 排序后都是 "aet")。这个排序后的字符串就作为哈希表的 Key。
  2. 使用 HashMap 进行归类。Key 是排序后的字符串,Value 是原始字符串组成的列表。遍历原数组时,利用 getOrDefault 方法将具有相同 Key 的原始字符串追加到同一个 List 中。
  3. 遍历结束后,Map 中所有的 Value 就是最终的分组结果,将其转换为 List<List<String>> 返回即可。
相关推荐
mldong几秒前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾133 分钟前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
北域码匠1 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
zhanghe6871 小时前
es的密码带有特殊字符,导出
java
指掀涛澜天下惊1 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
pnoker1 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++1 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy1 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
禹凕2 小时前
Dijkstra算法详解与应用
python·算法
天远数科2 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化