</pre>stack的方法。栈内存index<p></p><p>遇到‘(’就入栈。</p><p>遇到‘)’就出站。如果stack为空也就是‘)’比‘(’多,就记录位置。也就是栈底所在的index。</p><p>如果能成功找到一个pair,也就是栈内至少又一个‘)’。则可以知道local length是多少。i-stk.top, 当 !stk.empty() h或者 i - start +1 d当stk.empty()。</p><p></p><p>时间复杂度:</p><p>O(n)</p><p></p><p>Code (C++):</p><p></p><pre name="code" class="cpp">class Solution {
public:
int longestValidParentheses(string s) {
int res = 0;
if(s.size() == 0) return 0;
int i = 0;
int len = 0;
stack<int> stk;
int start = 0;
while(i < s.size())
{
if(s[i] == '(') stk.push(i);
else
{
if(stk.empty())
{
start = i+1;
}
else
{
stk.pop();
res = max(res, stk.empty()?i-start+1:i-stk.top());
}
}
i++;
}
return res;
}
};