0%
Loading ...

【Leetcode 筆記】 49. Group Anagrams

題目解釋

前置題目:【Leetcode 筆記】 242. Valid Anagram

字謎 (Anagram) 是透過重新排列不同 word 的 character 而形成的新 word,通常只使用一次所有原始字母

你必須把有相同 anagram 的 elements 組合起來放到同一個 sub list 中。

範例

  • 輸入: strs = ["eat","tea","tan","ate","nat","bat"]
  • 輸出: [["bat"],["nat","tan"],["ate","eat","tea"]]

nat 重新排列之後可以變成跟 tan 一樣的詞,所以 group 在一起。

最佳解法

如果看過前置題目 【Leetcode 筆記】 242. Valid Anagram 就會簡單很多,
以 sort 過的做為 key,再將所有變體放進對應 key 中的 list,最後只回傳 dict.values() 就好了。

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        groups = dict()

        for s in strs:
            key = "".join(sorted(s))
            if key not in groups:
                groups[key] = [s]
            else:
                groups[key].append(s)

        return groups.values()

時間複雜度

O(n),雖然 sort 只需要 O(nlogn) 但是我們必須 traverse 整個 array 才能解決這個問題。

冷知識

如果真的想深究 python 底層用什麼 sort algorithm 的話,
可以參考這篇 Quicksort, Timsort, Powersort,python 3.11 後從 Timsort 改為 Powersort
兩種演算法都結合並改善了 Merge Sort 需要 O(n) 空間以及 Quick Sort 不 stable 的特性。

空間複雜度

O(n)groups 的大小。

數據女巫 𝔻.𝕡𝕪𝕤 🔮

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.