LeetCode 31. Longest Valid Parentheses O(n)实现
2014-06-21 03:32
381 查看
dp数组初始化为0, dp[i]代表以下标s[i]结尾的最长合法括号串的长度。
递推公式:
dp[i] = dp[i-1] + 2; 其中2是本身自己这对括号
再加上这条以s[i]结尾新括号串前的最长合法括号串的长度(dp[i-dp[i]], 可能为0).
代码:
递推公式:
if (s[i]==')' && i-1-dp[i-1]>=0 && s[i-1-dp[i-1]]=='(') // 边界检查 { dp[i] = dp[i-1]+2; if (i-dp[i] >= 0) // 边界检查 { dp[i] = dp[i] + dp[i-dp[i]]; } }当s[i]为反括号')',并且以是s[i-1]结尾的最长合法括号串前面的那个字符是正括号'(' [b]时,条件为真:[/b]
dp[i] = dp[i-1] + 2; 其中2是本身自己这对括号
再加上这条以s[i]结尾新括号串前的最长合法括号串的长度(dp[i-dp[i]], 可能为0).
代码:
class Solution
{
public:
int longestValidParentheses(string s)
{
vector<int> dp(s.size(), 0);
for (int i = 1; i < s.size(); ++ i)
{
if (s[i]==')' && i-1-dp[i-1]>=0 && s[i-1-dp[i-1]]=='(') // 边界检查 { dp[i] = dp[i-1]+2; if (i-dp[i] >= 0) // 边界检查 { dp[i] = dp[i] + dp[i-dp[i]]; } }
}
return s.empty()? 0: *max_element(dp.begin(), dp.end());
}
};
相关文章推荐
- LeetCode 之 Valid Parentheses — C++ 实现
- 【LeetCode】20 Valid Parentheses (c++实现)
- 【LeetCode-面试算法经典-Java实现】【020-Valid Parentheses(括号验证)】
- 【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】
- 【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】
- 【LeetCode】20 Valid Parentheses (c++实现)
- C实现 LeetCode->Valid Parentheses
- Leetcode Day5 20. Valid Parentheses Python 栈的实现
- [Leetcode] Longest Valid Parentheses
- LeetCode: Valid Parentheses
- LeetCode: Longest Valid Parentheses
- 【leetcode】Valid Parentheses
- leetcode - Longest Valid Parentheses
- [LeetCode] Valid Parentheses 解题报告
- leetcode 52: valid parentheses
- leetcode 52: valid parentheses
- Leetcode: Valid Parentheses
- leetcode Longest Valid Parentheses
- [LeetCode] 最长合法括号 longest valid parentheses
- LeetCode : Valid Parentheses