您的位置:首页 > 其它

leetcode Longest Valid Parentheses

2016-05-29 10:57 387 查看
这道题的目标是求一个仅含左右括号的字符串中,最长连续的有效匹配长度。

例如((())是4,()(()是2,等等。

说是动态规划…其实我觉得不至于,不过递推形式和DP有些类似,上代码。

class Solution {
public:
int longestValidParentheses(string s) {
int n = s.size();
int max = 0, p=-1;
int *st = new int
, *L = new int
;
// st是一个栈,栈顶元素为"当前配对的左括号的下标"
// L[i]为s[0...k]中包含字符s[k]的最长匹配长度
// 即s[0...k]最长匹配后缀的长度

for(int i=0;i<n;i++)
{
L[i] = 0; // 初始化

// 左括号不可能是某个匹配的结尾,所以L[i]=0
if(s[i] == '(')
st[++p] = i;

else if(s[i] == ')')
{
if(p>=0)
{
// 称形如"(())"的后缀为连续匹配段,则
// L[st[p]-1]是当前连续匹配段之前已有的长度
// L[i-1]是当前连续匹配段的长度
if(st[p]-1>0)
L[i] = L[st[p]-1]+L[i-1]+2;
else L[i] = L[i-1]+2;
p--;
}
else
{
L[i] = 0;
}
}
if(L[i] > max) max = L[i];
}

delete[] L;
delete[] st;
return max;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: