一开始看到这个题目的时候,由于之前做到过判断是否为有效括号的题目,所以我想到了用栈的思想,编写代码。但是,从这个思路走下去,必须把整个字符串分解为各个有效部分,分别判断,求取最长,比较麻烦。后来看到题解的方法,是先在栈里面放进去了一个(-1).这个想法很好。
具体代码如下:
class Solution {
public:
int longestValidParentheses(string s) {
int maxans = 0;
stack<int> stk;
stk.push(-1);
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(') {
stk.push(i);
} else {
stk.pop();
if (stk.empty()) {
stk.push(i);
} else {
maxans = max(maxans, i - stk.top());
}
}
}
return maxans;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/longest-valid-parentheses/solution/zui-chang-you-xiao-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
其他的还有动态规划的方法,这个方法以后碰到最值问题的时候需要有条件反射。
另一种是贪心算法,设定了左边括号计数器和右边括号计数器,但是注意这个方法需要从左到右和从右到左都循环一遍。