iT邦幫忙

2025 iThome 鐵人賽

0

題目說明

  1. Group Anagrams
    給你一個字串陣列 strs,請將 字母異位詞(anagrams)分組在同一個子陣列中。
    字母異位詞定義:由相同字母組成,但順序可以不同。

範例

Input: ["eat","tea","tan","ate","nat","bat"]
Output: [["eat","tea","ate"],["tan","nat"],["bat"]]

Input: [""]
Output: [[""]]

Input: ["a"]
Output: [["a"]]

程式碼

Python 解法

from collections import defaultdict
def groupAnagrams(strs):
ans = defaultdict(list)
for s in strs:
key = tuple(sorted(s))
ans[key].append(s)
return list(ans.values())

Java 解法

import java.util.*;
class Solution {
public List<List> groupAnagrams(String[] strs) {
Map<String, List> map = new HashMap<>();
for (String s : strs) {
char[] chars = s.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
map.get(key).add(s);
}
return new ArrayList<>(map.values());
}
}

Java vs Python 差異
• Python 用 defaultdict(list) 簡化初始化,Java 需手動判斷 key 是否存在
• Python 用 tuple(sorted(s)) 當 key,Java 先排序 char[] 再轉回 String
• 核心邏輯相同:排序後作為 key,將相同 key 的字串放入同一群組

複雜度分析
• 時間複雜度:O(n * k log k),n 是字串數量,k 是字串平均長度(排序每個字串 O(k log k))
• 空間複雜度:O(n * k),存放結果與映射


上一篇
day 23 Longest Substring Without Repeating Characters
下一篇
day 25 Contains Duplicate
系列文
不熟程式的我在leetcode打滾30天30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言