问题描述
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.
class Solution {
public:
int longestValidParentheses(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
stack<char> chs;
stack<int> top;
char c;
int length=s.size();
int ret=0;
chs.push('\0');
top.push(-1);
for(int i=0 ; i<length ; i++){
if(s[i]=='('){
chs.push('(');
top.push(i);
}
else{
c=chs.top();
if(c=='('){
chs.pop();
top.pop();
int j=top.top();
ret=max(ret,i-j);
}else{
chs.push(')');
top.push(i);
}
}
}
return ret;
}
};
这道题的主要思路在这一表达式ret=max(ret,i-j);