767. Reorganize String
題目網址:https://leetcode.cn/problems/reorganize-string/
題意:給一 string
s
, 重新建構s
使得相鄰的 char 不同。返回
s
任何可能的排列。若不可行, 則返回""
。
Solution:
想法:利用 Heap, 若有 char 的出現次數超過 $\dfrac{n+1}{2}$, 則不可能存在相鄰 char 不同的 string
- 建立 max heap
- 每次從 heap 中取兩個 top, 保證這兩個 char 必不相同
- 取出 top 後, 其
count - 1
若> 0
, 將其 push 回 heap 中- 跳出 while loop 是因為
pq.size() < 2
- 若
pq.size() == 1
:s
要加上pq.top()
- 若
pq.size() == 0
:直接返回s
class Solution { |
- time:$O(n)$ ➔ $O(n) + O(26 \cdot log(n))$
- $O(n)$:第一個 for loop, 和 while loop 中重構
s
- $O(26 \cdot log(n))$:第二個 for loop 最多 insert
26
次
- $O(n)$:第一個 for loop, 和 while loop 中重構
- space:$O(1)$ ➔
freq
和pq
最多26
個元素, 且s
為 input string, 故只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論