leetcode 032. 最長有效括號

給定一個只包含 '('')' 的字符串,找出最長的包含有效括號的子串的長度。

示例 1:

輸入: "(()"
輸出: 2
解釋: 最長有效括號子串為 "()"

示例 2:

輸入: ")()())"

輸出: 4
解釋: 最長有效括號子串為 "()()"

思路:
從左向右找,只處理)括號,判斷起點(diǎn)位置left,如果前1位的dp有值,那么起點(diǎn)就應(yīng)再減去長度,即left = i - 1 - dp[i - 1],如果left>=0并且起點(diǎn)left為(時,當(dāng)前dp長度為dp[i-1]+2;另外,如果left的前一位也有值,表示字符前面還能連起來,所以還要加上前面的長度,即dp[i] += dp[left -1]

class Solution:
    def longestValidParentheses(self, s):
        if not s:
            return 0
        dp = [0 for _ in range(len(s))]
        for i in range(1, len(s)):
            if s[i] == ')':
                # 判斷起點(diǎn)位置為前1位,如果前1位的dp有值起點(diǎn)就為再減去長度
                left = i - 1 - dp[i - 1]
                # 如果起點(diǎn)大于等于0,并且起點(diǎn)為(,則長度為前1個長度+2
                if left >= 0 and s[left] == '(':
                    dp[i] = dp[i - 1] + 2
                    # 如果起點(diǎn)前1位dp有值,說明要算上前面的長度
                    if left - 1 >= 0:
                        dp[i] += dp[left - 1]
        print(dp)
        res = max(dp)
        return res
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容