LeetCode 1249. 移除无效的括号(栈+set / deque)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1249. 移除无效的括号(栈+set / deque)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給你一個由 '('、')' 和小寫字母組成的字符串 s。
你需要從字符串中刪除最少數目的 ‘(’ 或者 ‘)’ (可以刪除任意位置的括號),使得剩下的「括號字符串」有效。
請返回任意一個合法字符串。
有效「括號字符串」應當符合以下 任意一條 要求:
- 空字符串或只包含小寫字母的字符串
- 可以被寫作 AB(A 連接 B)的字符串,其中 A 和 B 都是有效「括號字符串」
- 可以被寫作 (A) 的字符串,其中 A 是一個有效的「括號字符串」
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 用棧判斷是否合法,不合法的位置,把 idx 存入 set 或者 哈希set
- 遍歷字符串把不合法的位置跳過,合法的加入答案字符串
52 ms 12.1 MB
或者用 unordered_set
class Solution { public:string minRemoveToMakeValid(string s) {string ans;stack<int> stk;unordered_set<int> del;for(int i = 0; i < s.size(); ++i){if(s[i] == '(')stk.push(i);else if(s[i] == ')'){if(!stk.empty())stk.pop();elsedel.insert(i);}}while(!stk.empty()){del.insert(stk.top());stk.pop();}for(int i = 0; i < s.size(); ++i){if(del.count(i))continue;ans += s[i];}return ans;} };76 ms 12.1 MB
或者使用 deque 模擬棧,最后剩下的就是要刪除的
順序遍歷deque就可以跳過要刪除的了
68 ms 12.4 MB
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的LeetCode 1249. 移除无效的括号(栈+set / deque)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 831. 隐藏个人信息
- 下一篇: LeetCode MySQL 1076.