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.
[Solution]
说明:版权所有,转载请注明出处。 Coder007的博客class Solution {
public:
int longestValidParentheses(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
stack<char> myStack;
stack<int> indexStack;
// get valid parentheses
for(int i = 0; i < s.size(); ++i){
// '('
if(s[i] == '('){
myStack.push(s[i]);
indexStack.push(i);
}
// ')'
else{
// pop the top of the stack
if(!myStack.empty() && myStack.top() == '('){
myStack.pop();
indexStack.pop();
}
// push ')'
else{
myStack.push(s[i]);
indexStack.push(i);
}
}
}
// get result
if(indexStack.empty()){
return s.size();
}
else{
int res = 0, top = s.size();
while(!indexStack.empty()){
res = max(res, top - indexStack.top() - 1);
top = indexStack.top();
indexStack.pop();
}
res = max(res, top);
return res;
}
}
};