241. Different Ways to Add Parentheses
150. Evaluate Reverse Polish Notation
224. Basic Calculator
32. Longest Valid Parentheses
题意:给定一个字符串,是由 ‘(’ 和 ‘)’ 两种字符组成,寻找最长的合法的括号子串。
输入:")()())"
输出:4
思路:
当然是用栈来进行括号匹配,只是得求最长的合法的括号子串,
可能字符串中有些括号不匹配导致把字符串切分成多个子串,我们需要记录一下不匹配字符的下标,然后知道合法子串有多少个,从而求出最长的。
class Solution(object):
def longestValidParentheses(self, s):
if not s: return 0
stack = [-1]
res = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
stack.pop() # 已经初始化栈了,有一个元素
if not stack:
stack.append(i)
else:
res = max(res, i - stack[-1]) # 遇到非法字符从而切分字符串了
return res