给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
第一次写成了括号匹配的个数就用个栈想着这个跟动态规划也没啥关系啊,后来的方法也没有用到动态规划,栈中保存的是一个下标,额外开辟一个数组
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> temp;
int m=0;
int count=0;
int res=0;
int n=s.size();
int *a=new int [n];
for(int i=0;i<n;i++)
{
a[i]=0;
}
for(int i=0;i<n;i++)
{
if(s[i]=='(')
temp.push(m++);
else if(!temp.empty())
{
int tmp=temp.top();
temp.pop();
a[tmp]=1;
}
else
m++;
}
for(int i=0;i<n;i++)
{
if(a[i]==1)
count+=2;
else
{
if(count>res)
res=count;
count=0;
}
}
return res;
}
};