字母异位词分组

🔗 字母异位词分组

题目来源:49. 字母异位词分组 – 力扣(LeetCode)


📌 题目描述

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

字母异位词 是指字母相同但排列不同的字符串。例如 "eat""tea" 就是字母异位词。


✅ 示例解析

示例 1:

  • 输入strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
  • 输出[["bat"],["nat","tan"],["ate","eat","tea"]]
  • 解释
    • "bat" 没有其他字母异位词。
    • "nat" 与 "tan" 互为字母异位词。
    • "ate""eat""tea" 三者互为字母异位词。

示例 2:

  • 输入strs = [""]
  • 输出[[""]]
  • 说明:空字符串与自身构成一组。

示例 3:

  • 输入strs = ["a"]
  • 输出[["a"]]
  • 说明:单个字符,只有一组。

⚠️ 提示

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

💡 解法:哈希表 + 排序


class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();

for (String s : strs) {
char[] charArray = s.toCharArray();
Arrays.sort(charArray);
String sorted = new String(charArray);
map.computeIfAbsent(sorted, k -> new ArrayList<>()).add(s);
}

return new ArrayList<>(map.values());
}
}

📊 复杂度分析

  • 时间复杂度:O(N × K log K)
    • N 是字符串个数,K 是字符串平均长度
    • 每个字符串排序耗时 O(K log K)
  • 空间复杂度:O(N × K)
    • 哈希表存储所有字符串分组

🧩 解题思路

  1. 核心思想:字母相同的字符串,排序后结果相同 → 可作为哈希表的 key
  2. 遍历每个字符串:
    • 转为字符数组并排序
    • 以排序后的字符串为 key,原字符串加入对应的 List
  3. 使用 computeIfAbsent 简化空值判断
  4. 最终返回 map.values() 的集合
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇