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;
}
};
本文介绍了一种使用栈来解决寻找字符串中最长有效括号子串问题的方法。通过遍历字符串并利用栈记录左括号位置,可以高效地找出最长的有效括号子串长度。
325

被折叠的 条评论
为什么被折叠?



