Longest Valid Parentheses
来源:互联网 发布:淘宝子账号手机登陆 编辑:程序博客网 时间:2024/04/30 06:42
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
- 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
- [LeetCode]Find Minimum in Rotated Sorted Array II
- Java的大内存分页支持
- 针对TCP/IP的调优
- 1501051659-hpu-1031 【C语言训练】求素数问题.cpp
- Java的浮点数计算问题
- Longest Valid Parentheses
- Android 其他
- Hibernate—No row with the given identifier exists
- Hadoop YARN的发展史与详细解析
- 几种任务调度的 Java 实现方法与比较
- .net加载子目录中动态库方法
- vim 颜色设置
- Qt5.3.1 MinGW482 release静态版编译结果、过程及QtCreator配置(转)
- Ajax 和 jQuery 实现进度条+上传文件到Django