Leetcode:Longest Valid Parentheses
2013-10-22 11:32
190 查看
Given a string containing just the characters
find the length of the longest valid (well-formed) parentheses substring.
For
which has length = 2.
Another example is
is
1.第一种暴力的O(n^2)大数据超时
2.动态规划O(n),dp[i]表示以i为结尾的最长配对括号数,注意这里有括号左右顺序限制。如果是正负数个数相同问题,此方法是错误的。
扩展:求最长字串长度,字串中正负数个数相同?
1.暴力,以i为开始的。正数+1,负数-1,记录为0的位置,最后一个为0的位置-i即为该次的最长。遍历串,O(n^2)
2.O(n)怎么做?辅助数组记录从0开始到当前位置正数个数-负数个数,然后针对辅助数组分析,L[j]==L[i]说明[i+1,j]区间正数负数个数相等,j-i即为以j为结尾的长度,扫一遍辅助数组,使用hash记录L[i]和i的对,最大的即为结果。
'('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 maxlen = 0; for(int i=0; i<s.size(); ++i) { int len = maxlenbeginwith(s.substr(i) ); if(maxlen < len) maxlen = len; } return maxlen; } int maxlenbeginwith(string s) { int sum = 0,len = 0; for(int i=0; i<s.size(); ++i) { if(s[i]==')') { sum--; } else ++sum; if(sum < 0) return len; if(sum == 0) len = i+1; } return len; }*/ int longestValidParentheses(string s) { /*if(s.empty()) return 0;*/ int* dp = new int[s.size()]; memset(dp,0,sizeof(int)*s.size() ); int maxlen = 0; for(int i=1;i<s.size(); ++i) { if(s[i]==')') { if(i-dp[i-1]-1>=0 && s[i-dp[i-1]-1]=='(') { dp[i] = dp[i-1]+2; if(i-dp[i-1]-2>=0) dp[i] += dp[i-dp[i-1]-2]; if(maxlen < dp[i]) maxlen = dp[i]; } } } delete [] dp; return maxlen; } };
1.第一种暴力的O(n^2)大数据超时
2.动态规划O(n),dp[i]表示以i为结尾的最长配对括号数,注意这里有括号左右顺序限制。如果是正负数个数相同问题,此方法是错误的。
扩展:求最长字串长度,字串中正负数个数相同?
1.暴力,以i为开始的。正数+1,负数-1,记录为0的位置,最后一个为0的位置-i即为该次的最长。遍历串,O(n^2)
2.O(n)怎么做?辅助数组记录从0开始到当前位置正数个数-负数个数,然后针对辅助数组分析,L[j]==L[i]说明[i+1,j]区间正数负数个数相等,j-i即为以j为结尾的长度,扫一遍辅助数组,使用hash记录L[i]和i的对,最大的即为结果。
相关文章推荐
- LeetCode_Longest Valid Parentheses
- leetCode_Longest Valid Parentheses
- LeetCode Longest Valid Parentheses
- Leetcode 32. Longest Valid Parentheses
- 32. Longest Valid Parentheses leetcode python new season 2016
- python写算法题:leetcode: 32. Longest Valid Parentheses
- [LeetCode] Longest Valid Parentheses 解题思路
- leetcode-longest valid parentheses
- leetcode做题总结,题目Longest Valid Parentheses 2012/02/29
- LeetCode之“动态规划”:Valid Parentheses && Longest Valid Parentheses
- [LeetCode] Longest Valid Parentheses
- LeetCode——Longest Valid Parentheses
- LeetCode | Longest Valid Parentheses
- 【leetcode】32. Longest Valid Parentheses
- 【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】
- Leetcode 之Longest Valid Parentheses(39)
- LeetCode 32. Longest Valid Parentheses
- LeetCode Longest Valid Parentheses
- 【LeetCode】Valid Parentheses & Generate Parentheses & Longest Valid Parentheses
- LeetCode 31 Longest Valid Parentheses