【栈、动态规划】Longest Valid Parentheses
来源:互联网 发布:达内大数据培训靠谱吗 编辑:程序博客网 时间:2024/05/22 05:18
题目: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.
分析:
1、先从左到右扫描。遇到 '(' 则入栈,反之出栈。每当栈为空时,更新一次返回值res!因为此时可能会产生新的最大值。
2、再从右到左扫描一次。为什么还需要从右到左扫描一次?因为从左到右扫描结束时,若栈不为空,则有可能还有一部分有效的左右括号没有记录到res中。
class Solution {public: int longestValidParentheses(string s) { if(s.size()<2) return 0; int res=0,cur=0; stack<char> sa; for(int i=0;i<s.size();i++) { if(s[i]=='(') { sa.push(s[i]); cur++; } else { if(sa.empty()) { cur=0; } else { sa.pop(); cur++; if(sa.empty()) res=max(res,cur); } } } if(sa.empty()) return res; while(!sa.empty()) { sa.pop(); } cur=0; for(int i=s.size()-1;i>=0;i--) { if(s[i]==')') { sa.push(s[i]); cur++; } else { if(sa.empty()) { cur=0; } else { sa.pop(); cur++; if(sa.empty()) res=max(res,cur); } } } return res; }};
另一种解法:动态规划,参考http://www.tuicool.com/articles/vUnEbi
class Solution {public: int longestValidParentheses(string s) { if(s.size()<=1) return 0; vector<int> f(s.size(),0); int res=0; for(int i=s.size()-2;i>=0;--i) { if(s[i]=='(') { int j=i+1+f[i+1]; if(j<s.size() && s[j]==')') { f[i]=f[i+1]+2; res=max(res,f[i]); if(j+1<s.size()) { f[i]+=f[j+1]; res=max(res,f[i]); } } } } return res; }};
0 0
- 【栈、动态规划】Longest Valid Parentheses
- 【Leetcode 32.Longest Valid Parentheses】动态规划
- 32. Longest Valid Parentheses 动态规划解法
- Longest Valid Parentheses,二维动态规划、一维动态规划、stack
- Leetcode 栈 Longest Valid Parentheses
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- leetcode:Longest Valid Parentheses 使用动态规划O(n)思路
- LeetCode 之 Longest Valid Parentheses(栈)
- [leetcode] 【栈】 32. Longest Valid Parentheses
- LeetCode 32 Longest Valid Parentheses (栈 推荐)
- LeetCode-32-Longest Valid Parentheses 栈
- 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
- DES SecretKeyFactory not available的处理
- ajaxfileupload 始终不执行success 只执行error方法;SyntaxError: expected expression, got '<
- 1240 Asteroids!
- Android -- 生命周期
- iOS/iPhone 程序文件目录结构以及启动流程
- 【栈、动态规划】Longest Valid Parentheses
- CMMI-基线
- 排序算法之堆排序
- 黑马程序员——OC核心语法点语法,成员变量,@property和@synthetic,构造方法
- 使用 ADF Skin
- 输入缓冲区的清除问题
- java
- ie6表格边框不显示问题
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离