Longest Valid Parentheses
2015-01-05 17:52
423 查看
Longest Valid Parentheses
动态规划
思路一(未实现):
从右端开始遍历,寻找 '(' 到末尾所构成的最大长度,根据存储的dp数组跳跃判断
思路二(python实现):
类似思路一,只不过遍历的时候不找全局最大,而是局部最大,类似贪心,存储之后再返回计算
具体过程如下:
) ( ) ( ( ( ) ) ( ( ( ) ( ) ) )
0121112411121268
第一行为给定的字符串,第二行为计算时存储的dp数组
从左侧开始遍历,遇到 '(' 就存储 1 ,遇到 ')' 的时候判断:
前一个数是1,则存储2(代表这个右括号构成了一个长度为2的合法括号对)
如果前一个数是0,说明前面为一个非法的右括号,那么当前位置也非法(前面没有左括号匹配了),也存储0
如果前一个数大于1,记为n,说明前面是匹配好的右括号,而且长度为n,这时查看再向前n步的位置的值,是0,1,还是大于1,重复上面步骤
如果一直大于1,则循环,否则,如果遇到0,则该位置存储0,遇到1,那么该位置存储一共跳过的位置再加2(此时该位置的右括号再远处找到了可以匹配的左括号)
遍历结束后得到上面的dp数组
这时开始计算最大值:
从后面开始遍历,遇到大于1的值,说明这一段连续的括号已经匹配,计入临时遍历count,此时游标向前跳该值那么多步(跳转到这段合法的括号前面一个位置)
如果遇到的还是大于1的值,循环寻找,并加入count
知道遇到1或者0,说明该段合法的括号与再前面的不构成更长的匹配括号,此时的count与ans比较,ans中存储较大者,count清零,游标前移一位,继续寻找,直到数组开头
例子(加粗为游标位置):
0121112411121268
count = 8 ans = 8
0121112411121268
count = 12 ans = 12
0121112411121268
count = 0 ans = 12
0121112411121268
count = 2 ans = 12
0121112411121268
count = 0 ans = 12
最终得到最大值为12
动态规划
思路一(未实现):
从右端开始遍历,寻找 '(' 到末尾所构成的最大长度,根据存储的dp数组跳跃判断
思路二(python实现):
类似思路一,只不过遍历的时候不找全局最大,而是局部最大,类似贪心,存储之后再返回计算
具体过程如下:
) ( ) ( ( ( ) ) ( ( ( ) ( ) ) )
0121112411121268
第一行为给定的字符串,第二行为计算时存储的dp数组
从左侧开始遍历,遇到 '(' 就存储 1 ,遇到 ')' 的时候判断:
前一个数是1,则存储2(代表这个右括号构成了一个长度为2的合法括号对)
如果前一个数是0,说明前面为一个非法的右括号,那么当前位置也非法(前面没有左括号匹配了),也存储0
如果前一个数大于1,记为n,说明前面是匹配好的右括号,而且长度为n,这时查看再向前n步的位置的值,是0,1,还是大于1,重复上面步骤
如果一直大于1,则循环,否则,如果遇到0,则该位置存储0,遇到1,那么该位置存储一共跳过的位置再加2(此时该位置的右括号再远处找到了可以匹配的左括号)
遍历结束后得到上面的dp数组
这时开始计算最大值:
从后面开始遍历,遇到大于1的值,说明这一段连续的括号已经匹配,计入临时遍历count,此时游标向前跳该值那么多步(跳转到这段合法的括号前面一个位置)
如果遇到的还是大于1的值,循环寻找,并加入count
知道遇到1或者0,说明该段合法的括号与再前面的不构成更长的匹配括号,此时的count与ans比较,ans中存储较大者,count清零,游标前移一位,继续寻找,直到数组开头
例子(加粗为游标位置):
0121112411121268
count = 8 ans = 8
0121112411121268
count = 12 ans = 12
0121112411121268
count = 0 ans = 12
0121112411121268
count = 2 ans = 12
0121112411121268
count = 0 ans = 12
最终得到最大值为12
相关文章推荐
- LeetCode Longest Valid Parentheses
- LeetCode Longest Valid Parentheses
- LeetCode解题报告—— Longest Valid Parentheses
- LeetCode --- 32. Longest Valid Parentheses
- Longest Valid Parentheses_Leetcode_#32
- Longest Valid Parentheses
- LeetCode – Refresh – Longest Valid Parentheses
- 第51题 Longest Valid Parentheses
- leetcode32_Longest Valid Parentheses
- leetcode: Longest Valid Parentheses
- Longest Valid Parentheses
- Longest Valid Parentheses
- Longest Valid Parentheses
- leetcode 115: Longest Valid Parentheses
- Leetcode32 Longest Valid Parentheses
- Leetcode#32||Longest Valid Parentheses
- LeetCode-Longest Valid Parentheses
- leetcode--LongestValidParentheses
- [leetcode] Longest Valid Parentheses
- leetcode Longest Valid Parentheses