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.
思路
建一个栈,记录上一个左括号的位置指针:遇到左括号就压栈,遇到右括号时检测栈里是不是非空的。如果非空,那就弹出一个并记录当前“有效段”长度;若是空的,说明当前这个右括号非法,意味着“有效段”到此为止了,更新pBegin(它指向“有效段”的第一个左括号)。
代码
class Solution {
public:
int longestValidParentheses(string s) {
const char* str=s.c_str(),*pbegin=str;
int maxlen=0;
vector<const char*> sta;
for (const char* p=str;*p;p++) {
if (*p=='(') {
sta.push_back(p);
} // ')'
else {
if (sta.size()>0) {
sta.pop_back();
int len;
if (sta.size()>0) len=p-sta.back();
else len=p-pbegin+1;
maxlen=len>maxlen?len:maxlen;
}
else {
pbegin=p+1;
}
}
}
return maxlen;
}
};