zoukankan      html  css  js  c++  java
  • 6-2

    32. 最长有效括号

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

    示例 1:

    输入: "(()"
    输出: 2
    解释: 最长有效括号子串为 "()"
    示例 2:

    输入: ")()())"
    输出: 4
    解释: 最长有效括号子串为 "()()"

    A good python solution:

    class Solution(object):
        def longestValidParentheses(self, s):
            """
            :type s: str
            :rtype: int
            """
            stack = [0]
            longest = 0
            
            for c in s:
                if c == "(":
                    stack.append(0)
                else:
                    if len(stack) > 1:
                        val = stack.pop()
                        stack[-1] += val + 2
                        longest = max(longest, stack[-1])
                    else:
                        stack = [0]
    
            return longest
    

    分析:

    用到了栈的思想:后进先出。

    遇左括号添0,遇右括号pop,从而保证当左右括号成对出现时对stack不会造成影响。

    一开始栈并不设计成空的,而是保留有一个元素,是为了当全部的左右括号恰好匹配时,依然可以保存左右括号的数量,从而得到longest。

    每次左右括号的值都保存在栈顶位置:stack[-1]。

    如果有多余的右括号,则重置栈中的元素(相当于重新初始化为[0])。

  • 相关阅读:
    WPF元素之间的关系
    依赖属性
    多线程显示运行状态
    WPF 基本知识
    SQL 这个删除重复行怎么做
    路由事件
    WPF的数据邦定
    SQL对表中XML列的查询
    WMI访问注册表读取系统信息
    创建第一个WPF应用程序
  • 原文地址:https://www.cnblogs.com/tbgatgb/p/11122735.html
Copyright © 2011-2022 走看看