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!
評論