leetcode -- Longest Valid Parentheses
2015-12-22 17:18
691 查看
https://leetcode.com/problems/longest-valid-parentheses/
这里考虑几个情况:
)))))()()
())))))()()
(((())))
分别讨论就能理解下述代码
这里要特别注意,下面的思路是不对的,只用scan到的i减去stack的top index,然后+1. 因为无法handle ‘()()’这种case,所以还是要像上面的code一样。用一个last来记录一个valid parenthess substring的开始index。
思路1 stack
思路:注意这里是要找的是最长的parenthese的substring,而不是所有匹配的括号有多少对。参考/article/4981630.html这里考虑几个情况:
)))))()()
())))))()()
(((())))
分别讨论就能理解下述代码
class Solution: # @param s, a string # @return an integer def longestValidParentheses(self, s): maxlen = 0 stack = [] last = -1 for i in range(len(s)): if s[i]=='(': stack.append(i) # push the INDEX into the stack!!!! else: if stack == []:#记住valid parentheses的开始index,例如一开始都是右括号,last会记住最后面那个右括号。last这里也可以看做linkedlist中的dummy node。这里用以应付'()()'这样的case last = i#记录valid substring的开始index,因为对于()()这样的case,当遇到第二个右括号的时候,last还是0. else: stack.pop() if stack == []:#当右括号,遇到stack里面最后一个左括号,即s中第一个左括号的时候,这个左括号肯定是valid parentheses substring的第一个字符,所以,要减去last,如果s的第一个字符是左括号,那么就相当于maxlen + 1,因为maxlen一直存的是substring len - 1 maxlen = max(maxlen, i-last) else:#如果一开始就有很多左括号,那么stack[len(stack) - 1]就是这个valid substring parentheses的开头 maxlen = max(maxlen, i-stack[len(stack)-1]) return maxlen
这里要特别注意,下面的思路是不对的,只用scan到的i减去stack的top index,然后+1. 因为无法handle ‘()()’这种case,所以还是要像上面的code一样。用一个last来记录一个valid parenthess substring的开始index。
class Solution(object): def longestValidParentheses(self, s): """ :type s: str :rtype: int """ maxlen = 0 stack = [] last = -1 for i in range(len(s)): if s[i]=='(': stack.append(i) # push the INDEX into the stack!!!! else: if stack == []: continue else: last = stack.pop() maxlen = max(maxlen, i-last+1) return maxlen
思路2 用dp
相关文章推荐
- mybatis 显示参数${} #{},${}适用场景 miniui sortField sortOrder
- dubbo/dubbox(二)Thrift协议实现
- 如何使用SVG生成超酷的页面预加载素描动画效果
- GridView的 PreRender事件与 RowCreated、RowDataBound事件大乱斗
- 在 Cent OS 6.5 中firefox 安装 flash 插件
- C++11中的std::bind
- js仿微博实现统计字符和本地存储功能
- CALayer简单应用 —— 阴影
- swift 获取类的所有属性、获取对象的属性值、设置对象的属性值
- 验证ip地址的正则表达式
- win7系统电脑突然没有声音的5种故障分析及解决方法详解
- 使用RadioGroup做tab切换的变形问题
- ZOJ 3329 One Person Game 概率DP 求期望 待定系数法 ★
- CSS3 滑动开关
- 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法
- ios不兼容CSS的active属性解决方法
- java list倒序输出及复制list集合
- js 上传图片预览 在网上找的例子,很好使
- java 判断含有中文的字符串的长度
- Spring MVC 通过反射将数据导出到excel