设为首页 加入收藏

TOP

[leetcode] Longest Valid Parentheses @python
2015-07-20 17:35:15 来源: 作者: 【 】 浏览:2
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..

评论

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

·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)
·请比较Python和R语言 (2025-12-26 01:48:42)
·JAVA现在的就业环境 (2025-12-26 01:19:24)
·最好的java反编译工 (2025-12-26 01:19:21)