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.
给定一个只包含‘(’和‘)’的字符串,找到最长的有效匹配字符子串。
#include "LongestValidParentheses.h"
#include <stack>
#include <algorithm>
int LongestValidParentheses::longestValidParentheses(string s)
{
stack<int> stk;
stk.push(-1);
int maxL = 0;
for (int i = 0; i < s.length(); i++)
{
//t为上一个不匹配点
int t = stk.top();
//以下条件满足时[t, i]区间之间为有效的括号
if (t != -1 && s[i] == ')' && s[t] == '(')
{
//注意出栈
stk.pop();
maxL = max(maxL, i - stk.top());
}
else
//不满足时为非匹配点,压入栈
stk.push(i);
}
return maxL;
}