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>> 返回即可。
相关推荐
碧海银沙音频科技研究院1 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法
dishugj1 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言
通问AI1 小时前
在两台 Mac Studio 上跑 800B 模型:MLX + RDMA over Thunderbolt 实测与四道门选型法
算法
ZywOo6231 小时前
《算法竞赛进阶指南》0x03 前缀和与差分
算法
苜蓿muxu1 小时前
常用代码命名规范
java
Scintilla_y1 小时前
DAY2 滑动窗口
算法·leetcode·散列表
lvwangshu1 小时前
笛卡尔树
算法·图论
马优晨2 小时前
JAVA 中 VO 实体类是什么意思,为什么要做这个
java·开发语言·状态模式·java vo·java vo是什么
026d232 小时前
状态信号只知“其然”不知“其所以然”:变工况机械故障诊断的物理盲区
算法