1.题目
Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
For "(()"
, the longest valid parentheses substring is "()"
, which has length = 2.
Another example is ")()())"
, where the longest valid parentheses substring is "()()"
, which has length = 4.
给你一串括号,找到最长的有效匹配的括号的长度。
2.思路
1. 创建一个栈,栈顶存放的是上次匹配失败的括号的下标;
2. 初始化,首先将-1入栈;
3.遍历字符串,如果是左括号'(',将左括号的下标入栈;
4.如果是右括号')',如果栈中元素个数>1,则代表有匹配的左括号,弹出栈顶元素,更新最大值;否则,代表右括号之前没有左括号,将右括号的位置入栈。
class Solution {
public:
int longestValidParentheses(string str) {
stack<int> s;
s.push(-1);
int ans = 0;
for(int i = 0;i<str.size();i++){
if(str[i] == '('){
s.push(i);
}
else{
if(s.size() > 1){
s.pop();
ans = max(ans,i-s.top());
}
else{
s.pop();
s.push(i);
}
}
}
return ans;
}
};