longest-valid-parentheses
来源:互联网 发布:js是哪里的车牌 编辑:程序博客网 时间:2024/06/01 09:50
题目:
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.
程序:
方法一:
括号类题目常规方法使用栈
class Solution {public: int longestValidParentheses(string s) { int ans=0,last=-1; stack<int> st; for(int i=0;i<s.size();i++){ if(s[i]=='(') st.push(i);//存储技巧,存储的是坐标而不是括号 else{ if(!st.size()) last=i; else{ st.pop(); if(st.size()) ans=max(ans,i-st.top()); else ans=max(ans,i-last); } } } return ans; }};
方法二:
动态规划,反向判断
class Solution {public: int longestValidParentheses(string s) { int i,j,n; int dp[65536]; int max=0; n=s.size(); for(i=0;i<65536;i++) dp[i]=0; for(i=n-2;i>=0;i--) { if(s[i]=='(') { j=i+1+dp[i+1]; if(j<n && s[j]==')') { dp[i]=dp[i+1]+2; if(j+1<n) dp[i]+=dp[j+1]; } } if(max<=dp[i]) max=dp[i]; } return max; }};
点评:
此题无法使用常规的字符串解法,会超时,一般需要用到栈,此题可采用一维动态规划,反向解题
阅读全文
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
- Android Activity/Fragment间的数据传递
- ViewTreeObserver视图树观察者
- 快速打开CMD的几个方法
- Jenkins Pipeline 项目持续集成交互实践路径
- Java序列化
- longest-valid-parentheses
- Mysql与Oracle的区别
- node学习笔记<入门级>
- java多线程同步的五种方法
- bash shell 清空文件的方法
- 词向量源码解析:(3.5)GloVe源码解析之glove
- ActivityCallcycleCallbacks基本解析
- JAVA多线程实现的三种方式
- AndroidManifest.xml文件中属性记录