LeetCode:Longest Valid Parentheses
Posted mqxnongmin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:Longest Valid Parentheses相关的知识,希望对你有一定的参考价值。
? ? ? ? ? ?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.
解题思路:
? ? 这题能够用栈或者dp做,只是自己用栈写的O(N)的解法没有dp的快,所以说下dp的思路吧.
首先,看下状态的定义:
- dp[i]:表示选了第i个字符能组成的最长有效括号个数.
条件(tmp>=0 && s[tmp]==‘(‘)那么就说明tmp到i这部分是有效括号匹配。而tmp之前的也有可能存在有
效括号匹配。所以须要将两者相加,须要注意的是,边界的地方.
class Solution {
public:
int longestValidParentheses(string s)
{
int n = s.size(), dp[n];
dp[0] = 0;
for (int i = 1; i < n; ++i)
{
int tmp = i - 1 - dp[i - 1];
if (s[i] == ‘(‘)
dp[i] = 0;
else if (tmp >= 0 && s[tmp] == ‘(‘)
dp[i] = dp[i - 1] + 2 + (tmp - 1 >= 0 ? dp[tmp - 1] : 0);
else
dp[i] = 0;
}
return *max_element(dp, dp + n);
}
};
? ? ?
以上是关于LeetCode:Longest Valid Parentheses的主要内容,如果未能解决你的问题,请参考以下文章
[Leetcode]Longest Palindromic Substring