269. Alien Dictionary
題目網址:https://leetcode.cn/problems/alien-dictionary/
題意:有一種使用英文的外星語言, 其字母的順序與英文的順序不同。
給一 word list
words
作為該外星語言的字典,wrods
中的 string 已按照外星語言的字母順序進行排序。請按照
words
還原出該語言中已知的字母順序, 並按字母的遞增順序排列。若不存在合法的字母順序, 則返回""
。若存在多種合法的順序, 則返回任意一種即可。string
s
小於 stringt
有兩種情況:
- 在第一個不同的字母處,
s
的字母順序在t
的字母之前- 如果前
min(s.length, t.length)
個字母都相同, 且s.length < t.length
words[i]
僅由小寫字母組成。
Solution:
想法:利用 Topological Sort + BFS, 類似 207. Course Schedule, 相鄰兩個 word 可建構一條順序
e.g.
words = ["wrt","wrf","er","ett","rftt"]
取
wrt
和wrf
➔ 得t < f
取
wrf
和er
➔ 得w < e
取
er
和ett
➔ 得r < t
取
ett
和rftt
➔ 得e < r
最終得
w < e < r < t < f
class Solution { |
- time:$O(n \cdot L)$ ➔ $O(n \cdot L) + O(26 + n)$
- $O(n \cdot L)$:建立
inDegree
需遍歷 words 中的每個 char- 其中 n 為
words
的個數,L
為每個 word 的平均長度
- 其中 n 為
- $O(26 + n)$:$O(V + E)$ 也就是 BFS 的時間複雜度
- edge 最多
n - 1
條(相鄰 2 個 word 建構一個字母順序) - vertex 最多 26 個, 因為
inDegree
最多紀錄 26 個 char 的 in degree
- edge 最多
- $O(n \cdot L)$:建立
- space:$O(n)$ ➔ $O(26 + n)$
- $O(26 + n)$:$O(V + E)$ 為
adj
所需的空間, 其中n
為words
的個數- edge 最多
n - 1
條(相鄰 2 個 word 建構一個字母順序) - vertex 最多 26 個, 因為
inDegree
最多紀錄 26 個 char 的 in degree
- edge 最多
- $O(26 + n)$:$O(V + E)$ 為
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論