LeetCode 2116. 判断一个括号字符串是否有效(栈)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 2116. 判断一个括号字符串是否有效(栈)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
一個括號字符串是只由 '(' 和 ')' 組成的 非空 字符串。
如果一個字符串滿足下面 任意 一個條件,那么它就是有效的:
- 字符串為 ().
- 它可以表示為 AB(A 與 B 連接),其中A 和 B 都是有效括號字符串。
- 它可以表示為 (A) ,其中 A 是一個有效括號字符串。
給你一個括號字符串 s 和一個字符串 locked ,兩者長度都為 n 。
locked 是一個二進制字符串,只包含 ‘0’ 和 ‘1’ 。對于 locked 中 每一個 下標 i :
- 如果 locked[i] 是 '1' ,你 不能 改變 s[i] 。
- 如果 locked[i] 是 '0' ,你 可以 將 s[i] 變為 '(' 或者 ')' 。
如果你可以將 s 變為有效括號字符串,請你返回 true ,否則返回 false 。
示例 1:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/check-if-a-parentheses-string-can-be-valid
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
跟 678 題一樣的
class Solution { public:bool canBeValid(string s, string locked) {int n = s.size();if(n%2==1) return false;stack<int> l;stack<int> star;for(int i = 0; i < s.size(); ++i){if(s[i] == '(' && locked[i] == '1')l.push(i);else if(locked[i] == '0')star.push(i);else{if(l.empty() && star.empty())return false;//不夠匹配if(!l.empty())l.pop();elsestar.pop();}}while(!l.empty() && !star.empty()){if(l.top() > star.top())// * ( 不能匹配return false;l.pop();star.pop();}return l.empty();} };80 ms 30.8 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 2116. 判断一个括号字符串是否有效(栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪些代码设计看似是面向对象,实际是面向过
- 下一篇: LeetCode 1708. 长度为 K