**Leetcode 32. Longest Valid Parentheses
来源:互联网 发布:小波分析算法与应用 编辑:程序博客网 时间:2024/06/06 21:32
主要两种思路,stack 以及 dp
我想出来的是stack的solution 自己的Dp没A掉,看了别人的Dp思路才懂。
1、最简单易懂的
struct Node {int idx;char c;Node(int idx, char c): idx(idx), c(c) {}};class Solution {public:int match(char l, char r) {if ( l == '(' && r == ')' ) {return 2;} else {return 0;}}int longestValidParentheses(string s) {int ans = 0;stack<Node> sta;for (int i = 0; i < s.size(); i++) {if ( sta.size() == 0 || !match( sta.top().c, s[i] ) ) {sta.push(Node(i, s[i]));} else {sta.pop();}}sta.push(Node(s.size(), '|'));int idxs[sta.size()];int len = sta.size();for ( int i = sta.size()-1; i >= 0; i-- ) {idxs[i] = sta.top().idx;sta.pop();}int last_v = 0;for ( int i = 0; i < len; i++ ) {ans = max( idxs[i] - last_v, ans );last_v = idxs[i] + 1;}return ans;}};
2、干净的stack代码
class Solution {public: int longestValidParentheses(string s) { stack <int> sta; int ans = 0, l = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == '(') { sta.push(i); } else { if (sta.empty()) { l = i + 1; } else { sta.pop(); if (sta.empty()) { ans = max( ans, i - l + 1 ); } else { ans = max( ans, i - sta.top() ); } } } } return ans; }};
3、dp
class Solution {public: int longestValidParentheses(string s) { int ans = 0; if (s.size() < 2) return 0; int longest[s.size()]; for (int i = 0; i < s.size(); i++) { longest[i] = 0; if (s[i] == ')' && i - 1 >= 0 && i - longest[i - 1 ] - 1 >= 0 && s[ i - longest[i - 1 ] - 1 ] == '(' ) { longest[i] = longest[i-1] + 2 + ( (i-longest[i-1]-2 >= 0)?longest[i-longest[i-1]-2]:0 ); ans = max(ans, longest[i]); } } return ans; }};
阅读全文
0 0
- LeetCode --- 32. Longest Valid Parentheses
- LeetCode 32.Longest Valid Parentheses
- [Leetcode] 32. Longest Valid Parentheses
- [LeetCode]32.Longest Valid Parentheses
- [leetcode]32.Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- LeetCode 32. Longest Valid Parentheses
- [leetcode] 32. Longest Valid Parentheses
- LeetCode 32. Longest Valid Parentheses
- LeetCode-32.Longest Valid Parentheses
- leetcode.32. Longest Valid Parentheses
- 【leetcode】32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- [LeetCode] 32. Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- leetcode 32.Longest Valid Parentheses
- leetcode 32. Longest Valid Parentheses
- 媳妇写给婆婆一封大逆不道却又非常合情合理且发人深思的信
- 【AppScan深入浅出】修复漏洞:启用不安全的HTTP方法 (中)
- bootstrap总结
- Nginx反向代理与负载均衡
- 十进制转换二进制
- **Leetcode 32. Longest Valid Parentheses
- 正则表达式
- 详解斯坦纳点及斯坦纳树及模版归纳总结
- Android开发环境搭建
- Thread类之线程中断
- 机器学习之概率与统计(三)- 极大似然估计
- Ionic生成Android程序并签名
- 第一次来,试试水
- 递归计算P函数