zoukankan      html  css  js  c++  java
  • 32 Longest Valid Parentheses

    32 Longest Valid Parentheses

    0 参考文献

    序号 标题
    1 白话LeetCode

    1 题目

    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 "()()"
    

    2 思路 && 方法

    这道题的是让判断最长的有效的连续的括号对子串的长度。什么叫最长有效的括号对呢?比如()()()这个就叫有效的括号对。但是())()这个就不算,因为第一括号对和第二个括号对之间有个) ,没有匹配到其他的括号。因此,使用dp方法的解法如下:

    1. 使用dp [ i ] 表示 S[ i - 1 ]处有效的括号对子串的长度。

    2. S[i-1] 有如下的2中情况:

    2.1. S[ i -1 ]== ")" , 又分为:
    2.1.1 如果 i - 1 - dp [ i - 1 ] - 1 < 0 则 dp[ i ] = 0
    2.1.2 如果s [ i - 1 - dp [ i - 1 ] - 1 ] == ")" 则 dp [ i ] = 0
    2.1.3 如果前面2个情况都不是,则dp [i] = dp[i-1] + 2 + dp [ i - 1 - dp[i-1] -2] 。其中,2表示与s[i-1]匹配成功的一对括号,dp[i-1]表示以s[i-2]结尾的合法括号子串的最大长度,dp[i-2-dp[i-1]]表示与s[i-1]匹配成功的左括号之前的合法括号子串的最大长度,如下图所示。

    2.2. S[ i -1 ]=="(" : 如果是这种情况,则dp [ i ] = 0 。

    dp

    3 实现

    #!/bin/bash
    
    class Solution(object):
        def longestValidParentheses(self, s):
            """
            :type s: str
            :rtype: int
            """
            max_l = 0
            dp = [ 0 ] * (len(s) + 1 )
            for i in range(  1 , len(s) + 1 ):
                j = i - 2 - dp[ i - 1 ]
                if s[ i - 1  ] == "(" or s[ j ] == ")" or j < 0 :
                    continue
                else:
                    dp[i] = dp[i-1] + 2 + dp[ j ]
                    max_l = max(max_l,dp[i])
            return max_l
    
    if __name__ == '__main__':
        m = Solution()
        print m.longestValidParentheses(")))))")
    
    
  • 相关阅读:
    ES6的let命令
    html5的新标签
    text()和html()的区别,以及val()
    jquery链接多个jquery方法
    jquery实现动画
    jquery的滑动
    jquery实现淡入淡出
    jquery的hide()和show()
    jquery里面的名称冲突解决方法
    写给W小姐的一封信
  • 原文地址:https://www.cnblogs.com/bush2582/p/10893649.html
Copyright © 2011-2022 走看看