我們可以在vector/string中使用two pointer來模擬stack,這樣的好處是可以減少很多不必要的push/pop。
1047. Remove All Adjacent Duplicates In String
實現一個MinStack,除了一般stack的功能push(), pop()和top()之外,還可以取得stack中的最小值getMin()。
- 這邊使用兩個stack,一個正常使用s1,一個是monotonic stack(遞減) s2,來記錄最小值。
- push的時候,因為s2為monotonic所以只推比top還小的值。
- pop的時候,如果s1和s2的top一樣,則兩個一起pop。
- 因為s2有著和s1一樣的順續,只是他只把比自己小的推進去,因為是min stack。
刪除重複出現的字元,每個字元只能出現一次,並且照字典排序。
這題為1047. Remove All Adjacent Duplicates In String的延伸題,原本是兩個一樣就可以刪除,現在是K個一樣才可以刪除。原本的題目是K=2。
- 可以使用stack<pair<char, int>>多一個欄位來儲存char的次數。
- 因為是stack也可以使用two pointers來模擬stack。
- method1和method2都使用額外的空間紀錄count,所以返回的答案也必須要根據count重建。
設計一個stack,pop的時候是把最大freq的element丟出來。
- 一開始使用兩個unordered_map,一個統計數量,一個統計每個freq的element。這樣做每次push或是pop都在搬移element出現在freq的位置。
- 參考答案,使用unordered_map<int, stack<int>>。不同的頻率有不同的stack。因為不同頻率的n,可以在stack中被排列。
- 一個stack可以被拆成3個stack,如下圖
leetcode
刷題