[String]032 Longest Valid Parentheses

  • 分类:String

  • 考察知识点:String

  • 最优解时间复杂度:O(n)

  • 最优解空间复杂度:O(n)

32. Longest Valid Parentheses

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

Example 1:

Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"

Example 2:

Input: ")()())"
Output: 4
Explanation: The longest valid parentheses substring is "()()"

代码:

stack方法:

class Solution:
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        stack=[]
        start=-1
        res=0
        
        for i,ch in enumerate(s):
            if ch=="(":
                stack.append(i)
            else:
                if len(stack)==0:
                    start=i
                else:
                    stack.pop()
                    if len(stack)==0:
                        res=max(res,i-start)
                    else:
                        res=max(res,i-stack[-1])
                        
        return res

讨论:

1.这道题有两种做法,一种stack一种DP
2.凡是看见括号的题目脑子里就一定要想到stack!!!
3.DP方法非到万不得已不要去用,不仅很难想,状态转移很难,而且很容易错
4.start是指前-后+1的(后+1)的部分,可以这么理解

加油
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容