Longest Valid Parentheses
来源:互联网 发布:雷电网络众筹 编辑:程序博客网 时间:2024/05/16 16:11
总结三种方法。
方法一,参考http://www.cnblogs.com/lichen782/p/leetcode_Longest_Valid_Parentheses.html 的解法二。
使用栈来保存左括号的Index,遇到左括号则进站。遇到右括号,如果当前栈为空,则表明当前index是一个无法匹配的“ )”,用last标记;如果当前栈不为空,则出栈。
出栈后如果当前栈为空,则从last到index是一个完整的匹配,更新最大长度,如果当前栈不为空,则当前valid序列长度为index-stack.top,尽管该序列可能继续增长。
时间复杂度O(n),空间复杂度O(n)。
代码如下:
class Solution {public: int longestValidParentheses(string s) { const int n = s.size(); stack<int> lefts; int start = -1; int max_len = 0; for(int i=0; i<n; ++i) { if(s[i] == '(') lefts.push(i); else { if(lefts.empty()) { //no left match, an invalid pos start = i; } else { //find a matching pair lefts.pop(); if(lefts.empty()) { //有一个完整的valid的group。计算该group的长度 max_len = max(max_len, i-start); } else { //栈内还有‘(',一个最外层完整的group还没有匹配完成, //但是通过查询下一个即将匹配还未匹配的"("的index来更新maxLen。 max_len = max(max_len, i-lefts.top());//the last un-matched '(' } } } } return max_len; }};
方法二,使用一维动态规划
参考 http://blog.csdn.net/abcbc/article/details/8826782
时间复杂度O(n),空间复杂度O(n)。
代码如下:
class Solution {public: int longestValidParentheses(string s) { const int len = s.size(); if(len == 0) return 0; int max_len = 0; vector<int> length(len, 0); for(int i=1; i<len; i++) { int match = i - length[i-1] - 1; if(match >=0 && s[match] == '(' && s[i] == ')') { length[i] = length[i-1] + 2; if(match >= 1) length[i] = length[i] + length[match-1]; max_len = std::max(max_len, length[i]); } } return max_len; }};
0 0
- LeetCode: Longest Valid Parentheses
- LeetCode Longest Valid Parentheses
- LeetCode: Longest Valid Parentheses
- [Leetcode] Longest Valid Parentheses
- [leetcode]longest Valid Parentheses(!!)
- Longest Valid Parentheses
- Longest Valid Parentheses
- [Leetcode] Longest Valid Parentheses
- leetcode Longest Valid Parentheses
- LeetCode31:Longest Valid Parentheses
- longest valid parentheses
- Longest Valid Parentheses
- 【leetcode】Longest Valid Parentheses
- Longest Valid Parentheses
- [LeetCode]Longest Valid Parentheses
- Longest Valid Parentheses
- Longest Valid Parentheses
- Longest Valid Parentheses
- 麻省理工女博士
- 页面访问ftp图片
- IOS开发 文件路径
- Android对图片进行压缩
- 常见hibernate错误
- Longest Valid Parentheses
- struts2漏洞
- Android安装的问题,我把问题总结了一下特此分享
- 基于.Net的单点登录(SSO)解决方案
- linux awk 内置函数详细介绍
- Spring MVC 教程,快速入门,深入分析
- 【Objective-C】03-第一个OC程序
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 使用FFmpeg为视频增加水印