给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
第一种思路:
暴力法,把所有长度为偶数的子字符串全部找出来,然后判断每个子字符串是不是有效。
Python会卡在217/230。
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
res = 0
for i in range(len(s)):
for j in range(i + 1, len(s), 2):
if self.isValid(s[i:j + 1]):
res = max(res, j - i + 1)
return res
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
mapping = {")":"(", "]":"[", "}":"{"}
stack = []
for i, char in enumerate(s):
if char not in mapping:#left
stack.append(char)
else:
if not stack or stack[-1] != mapping[char]:
return False
stack.pop()
return len(stack) == 0
第二种思路:
利用栈,见以下链接方法3
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
stack = [-1]
res = 0
for i, x in enumerate(s):
if x == "(":
stack.append(i)
else:
stack.pop()
if stack:
res = max(res, i - stack[-1])
else:
stack.append(i)
return res