leetcode -- Longest Valid Parentheses
来源:互联网 发布:淘宝的91论坛共享号 编辑:程序博客网 时间:2024/06/04 10:12
https://leetcode.com/problems/longest-valid-parentheses/
思路1 stack
思路:注意这里是要找的是最长的parenthese的substring,而不是所有匹配的括号有多少对。参考http://www.cnblogs.com/zuoyuan/p/3780312.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
0 0
- LeetCode: Longest Valid Parentheses
- LeetCode Longest Valid Parentheses
- LeetCode: Longest Valid Parentheses
- [Leetcode] Longest Valid Parentheses
- [leetcode]longest Valid Parentheses(!!)
- [Leetcode] Longest Valid Parentheses
- leetcode Longest Valid Parentheses
- 【leetcode】Longest Valid Parentheses
- [LeetCode]Longest Valid Parentheses
- [leetcode] Longest Valid Parentheses
- LeetCode-Longest Valid Parentheses
- [LeetCode] Longest Valid Parentheses
- LeetCode:Longest Valid Parentheses
- Leetcode: Longest Valid Parentheses
- Leetcode:Longest Valid Parentheses
- leetcode Longest Valid Parentheses
- leetcode Longest Valid Parentheses
- LeetCode Longest Valid Parentheses
- Ubuntu通过串口发送文件给u-boot
- 面试 阿里巴巴
- dubbo/dubbox(二)Thrift协议实现
- 配置Sprintmvc4&tomcat解释中文乱码问题
- hdu 5592 BestCoder Round #65 1003
- leetcode -- Longest Valid Parentheses
- 万普sdk接入_获得虚拟货币
- virtualBox上linux配置独立ip
- 一步一步学习TypeScript(18.Interfaces_接口)
- Window.open()方法参数详解
- 网页设计心得报告(6) by ksy
- 快速掌握htop
- iOS与后台配合实现—RSA 非对称加解密
- 处理 jdk finished with non-zero exit value 2 异常