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.
题意
判断一个只包含“(” “)”的字符串,其符合规则的最长连续有效长度是多少。
题解
难度在于判断从哪里开始计算有效字符的长度,比如()(()() 正确的长度是4,难度在于如何知道最长的有效字符在第四个字符开始。
所以用栈存储的不应该是字符,而是该字符的下标。
当遇到)没有匹配的(时,应该把起始座标改为)的下标。 当一对()匹配完(此时匹配的‘(’已经出栈),而stk还没空的话,那么有效长度暂时是i-stk.top()。
代码应该会比较清晰。
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> stk;
int max_len=0,pos=-1;
for(int i=0;i<s.length();i++)
{
if(s[i]!='(')
{
if(!stk.empty())
{
stk.pop();
if(stk.empty())
max_len=max(max_len,i-pos);
else max_len=max(max_len,i-stk.top());
}
else pos=i;
}
else stk.push(i);
}
return max_len;
}
};