LeetCode 678 有效的括号字符串[栈] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 678 有效的括号字符串[栈] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
在一开始,我只是单纯的记录左右括号数量的差值和星的个数,但是这样的方法暴露出一个问题,即星出现在多出来的左括号左边,无法变成右括号抵消的情况,所以我决定用两个栈分别存储左括号和星的位置,帮助我判断是否能够变成右括号抵消。一开始遇到左括号和星都进栈,遇到右括号先左括号弹栈抵消,不够的话星弹栈抵消,都不够直接返回false,第一次遍历结束后,就可以比对左括号和星,如果左括号栈顶位置比星栈顶大,说明无法抵消,返回false,其余的都一个个抵消即可,最后返回左括号栈是否为空,为空说明抵消完了,为true,否则返回false,代码如下:
class Solution {
public:
bool checkValidString(string s) {
int n = s.size();
stack<int> left;
stack<int> stars;
for(int i = 0; i < n; i ++) {
if(s[i] == '(') {
left.push(i);
} else if(s[i] == '*') {
stars.push(i);
} else {
// 首先用左括号抵消
if(!left.empty()) left.pop();
// 左括号不够用*抵消
else if(!stars.empty()) stars.pop();
else return false;
}
}
while(!left.empty() && !stars.empty()) {
if(left.top() > stars.top()) return false;
left.pop();
stars.pop();
}
return left.empty();
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/valid-parenthesis-string/solution/cshuang-zhan-cao-zuo-by-heroding-oye6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/
以上是关于LeetCode 678 有效的括号字符串[栈] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—678. 有效的括号字符串( 字符串)—day36
Leetcode刷题100天—678. 有效的括号字符串( 字符串)—day36
LeetCode 678. 有效的括号字符串(贪心,动规) / 4. 寻找两个正序数组的中位数(二分,关键题) / 447. 回旋镖的数量