leetcode第32题:最长有效括号

leetcode第32题:最长有效括号_第1张图片

 

 关于括号匹配或生成的问题,首先想到的是栈。

本题易错点:返回值为连续有效()的长度, 即()(()这种情况下,返回值为2

# 去除字符串首的连续)和字符串尾得连续(
        while True:
            if not s or len(s)==1:return 0
            if s[0]==')':s= s[1:]
            if s[-1] =='(':s=s[:-1]
            else:break
        res = 0
        # 定义栈
        stack = [-1]
        for i in range(len(s)):
            # 为(时,将索引压入栈中
            if s[i] == "(":
                stack.append(i)
            else:
            # 为)时,弹出栈首索引,完成匹配
                stack.pop()
            # 若弹出栈首后为空了,则将索引压入
                if len(stack)==0:
                    stack.append(i)
                else:
            # 当前)的索引-剩余未匹配(的最大索引值= 有效长度
                    res = max(res,i - stack[-1])
        return res

  该解法最难点在于 

res = max(res,i - stack[-1])
由于压入的字符串的索引,当完成两两匹配后,当前)的索引值-栈内剩余(最大的索引值 = 有效长度
将该有效长度与之前的对比取最大值。

转载于:https://www.cnblogs.com/cchenyang/p/11436591.html

你可能感兴趣的:(leetcode第32题:最长有效括号)