美文网首页
78. LeetCode.32. 最长有效括号

78. LeetCode.32. 最长有效括号

作者: 月牙眼的楼下小黑 | 来源:发表于2019-02-27 16:33 被阅读2次
  • 标签: 动态规划
  • 难度: 困难

  • 题目描述
  • 解法1: 错误

参考以前写的一道题: LeetCode 20. 有效的括号, 不难写出如下 代码。

class Solution(object):
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        
        lefts = []
        result = 0
        i = 1
        while(i<len(s)):
            if s[i] == '(':
                lefts.append(i)
            if s[i] == '(' and not lefts:
                lefts.pop()
                result += 2
        return result

但是这段代码是错误的,因为忽略了有效子串必须连续. 一个错误示例:


  • 解法2: 正确

新开一个长度等于 s 的数组 matched,如果在 ( 出栈时,也即发生匹配时, 在 matched 对应位置标记为匹配. 最后问题转化为求 0-1 数组中最长连续 1 子串的长度,用动态规划求解. 具体地, 遍历 matched 数组, 假设到了 i 位置, 用 L_i 记录 包含 matched[i] 的最长 1 子串长度, 若 matched[i] = 1, 则 L_i = L_(i-1) + 1, 若 matched[i] = 0, 则 L_i = 0; 用 ML_i 记录从 matched[0]matched[i] 之内的最长连续 1 子串长度,ML_i = max(L_i, ML_(i-1)).

class Solution(object):
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        
        lefts = []
        matched = [0] * len(s)
    
        for i in range(0, len(s)):
            if s[i] == '(':
                lefts.append(i)
            if s[i] == ')' and lefts:
                j = lefts.pop()
                matched[i], matched[j] = 1, 1
        print(matched)
        L, ML = 0, 0
        for i in matched:
            if i:
                L +=1
            else:
                L = 0
            ML = max(ML, L)
        return ML
                
  • 其他解法

暂略。

相关文章

  • 78. LeetCode.32. 最长有效括号

    标签: 动态规划 难度: 困难 题目描述 解法1: 错误 参考以前写的一道题: LeetCode 20. 有效...

  • 最长有效括号

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/long...

  • 最长有效括号

    //给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。//输入:s = ...

  • 最长有效括号

    难点在于()()如何匹配前面的连续(),还有(())如何处理 举例:s[i-2]==")" ()([)]=>dp[...

  • 最长有效括号

    32. 最长有效括号 题目: 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串...

  • LeetCode-32-最长有效括号

    LeetCode-32-最长有效括号 题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的...

  • LeeCode刷题笔记4:最长有效括号

    @[TOC](最长有效括号) 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串...

  • 32. 最长有效括号

    32. 最长有效括号 视频讲解挺好的

  • leetcode 32 最长有效括号

    32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1...

  • 最长的有效括号

    题目描述:给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例:输入: ")(...

网友评论

      本文标题:78. LeetCode.32. 最长有效括号

      本文链接:https://www.haomeiwen.com/subject/qfhfuqtx.html