设为首页 加入收藏

TOP

[leetcode] Longest Valid Parentheses @python
2015-07-20 17:35:15 来源: 作者: 【 】 浏览:1
Tags:leetcode Longest Valid Parentheses @python
Given a string containing just the characters '(' 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.
?
Solution 1: This solution is more natural and easy to understand.
?
复制代码
class Solution:
? ? # @param s, a string
? ? # @return an integer
? ? def longestValidParentheses(self, s): ? ? ? ?
? ? ? ? stack = [(-1, ')')]
? ? ? ? maxLen = 0
? ? ? ? for i in range(len(s)):
? ? ? ? ? ? if s[i] == ')' and stack[-1][1] == '('
? ? ? ? ? ? ? ? stack.pop()
? ? ? ? ? ? ? ? maxLen = max(maxLen, i - stack[-1][0])
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? stack.append( (i, s[i]) )
? ? ? ? return maxLen
复制代码
?
?
?
?
Solution 2: It is smart but not practical
?
?
?
复制代码
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)
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? if stack == []:
? ? ? ? ? ? ? ? ? ? last = i
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? stack.pop()
? ? ? ? ? ? ? ? ? ? if stack == []:
? ? ? ? ? ? ? ? ? ? ? ? maxLen = max(maxLen, i - last)
? ? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? ? ? maxLen = max(maxLen, i - stack[-1])
? ? ? ? return maxLen
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4414 Finding crosses(dfs) 下一篇[leetcode] Valid Parentheses @P..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)