当前位置: 首页 > article >正文

leetcode-32. 最长有效括号

题目描述

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

子串

的长度。

示例 1:

输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"

示例 2:

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

示例 3:

输入:s = ""
输出:0

思路

一般括号问题都需要一个辅助栈

1)遍历字符串,如果是左括号,就直接入栈;如果是右括号且栈里已经有括号了,说明已经有成对的括号出现了;将栈的顶部括号pop出来,当前的也放入res数组里

2)对res数组进行排序

3)接下来,在res数组里,找到最长的连续升序,即为所求

class Solution(object):
    def longestValidParentheses(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        stack = []
        res = []
        for i in range(len(s)):
            if stack and s[i]==')':
                res.append(stack.pop())
                res.append(i)
            if s[i]=='(':
                stack.append(i)
        res.sort()
        i = 0
        ans = 0
        n = len(res)
        while i<n:
            j=i
            while j<n-1 and res[j+1] == res[j]+1:
                j+=1
            ans = max(ans, j-i+1)
            i = j+1
        return ans

if __name__ == '__main__':
    s = Solution()
    ss = "()(()"
    print(s.longestValidParentheses(ss))

http://www.kler.cn/news/330832.html

相关文章:

  • 软件测试学习笔记丨Mock的价值与实战
  • centos7系统安装宝塔面板
  • C++之多线程
  • 14.数据结构与算法-栈的表示和实现(顺序栈和链栈)/栈和递归
  • C/C++进阶(一)--内存管理
  • Java-并发基础
  • Nacos笔记
  • 论文笔记(四十七)Diffusion Policy: Visuomotor Policy
  • 【C++复习】C++11经典语法
  • 将模板引擎用于 Express
  • 65 注意力分数_by《李沐:动手学深度学习v2》pytorch版
  • 前端开发技术框架选型
  • 每日一题|1928. 规定时间内到达终点的最小花费|动态规划、最小路径
  • 强弱依赖(含示例)
  • ANTLR4 与 flex/bision、lex/yacc 的比较
  • Electron 进程通信
  • Spring MVC系统学习(二)——Spring MVC的核心类和注解
  • 五子棋双人对战项目(5)——对战模块
  • Ubuntu编译fftw3
  • 端口隔离配置的实验