@author: ZZQ

@software: PyCharm

@file: leetcode32_最长有效括号.py

@time: 2018/11/22 19:19

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

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

思路:

     1)max_len 用于记录当前匹配最长的括号长度。
2)s_dict用来存储遇到的左括号的下标。
3)start存储有效的起始下标。
4)遇到左括号,下标入栈
5)遇到右括号,a.如果此时s_dict为空,则更新start的值
b. 否则,s_dict栈顶元出栈,此时,
b.1.如果是栈为空,记录当前匹配到的子串长度【i到start之间的距离,包含start】i-start+1,更新max_len的值;
b.2.如果栈非空,后面可能还会继续匹配,先记录当前匹配到的子串长度【i到栈顶元素下标之间的距离】i-s_dict[-1],更新max_Len的值。

AC代码如下:

class Solution():
def __init__(self):
pass def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
s_len = len(s)
max_len = 0
s_dict = []
i = 0
start = 0
while i < s_len:
if s[i] == '(':
s_dict.append(i)
else:
if len(s_dict) == 0:
i += 1
start = i
continue
else:
s_dict.pop()
if len(s_dict) == 0:
max_len = max(max_len, i-start+1)
else:
max_len = max(max_len, i-s_dict[-1])
i += 1
return max_len if __name__ == "__main__":
answer = Solution()
print(answer.longestValidParentheses("(())((()"))

Leetcode——32.最长有效括号【##】的更多相关文章

  1. LeetCode 32. 最长有效括号(Longest Valid Parentheses) 31

    32. 最长有效括号 32. Longest Valid Parentheses 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 每日一算法2019/6/ ...

  2. Java实现 LeetCode 32 最长有效括号

    32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 & ...

  3. leetcode:32 最长有效括号

     题目: 给一个包含了'(' 和 ')'的字符串,求出其中最长有效括号的长度. 做题情况:自己做出来,但做了较长的时间. 思路:可以算得穷举法的时间复杂度为O(n^3).虽然这题求的是最长的长度,但是 ...

  4. LeetCode 32. 最长有效括号(Longest Valid Parentheses)

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

  5. Leetcode32. 最长有效括号

    32. 最长有效括号 做法 \(f_{i}\)以\(i\)结尾的最长匹配 前提为\(s[i]=')'\) \(s[i-1]='('\),则\(f[i]=f[i-2]+2\) \(s[i-1]=')'\ ...

  6. [LeetCode] 32. Longest Valid Parentheses 最长有效括号

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  7. LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)

    题目链接: https://leetcode.com/problems/longest-valid-parentheses/?tab=Description   Problem :已知字符串s,求出其 ...

  8. LeetCode(32):最长有效括号

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

  9. 【LeetCode 32】最长有效括号

    题目链接 [题解] 设dp[i]表示以第i个字符结尾的最长有效括号的长度. 显然只要考虑s[i]==')'的情况 则如果s[i-1]=='(',则dp[i] = dp[i-2]+2; 如果s[i-1] ...

随机推荐

  1. scanf函数(初学者)

    scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. 1.scanf函数的一般形式:scanf函数是一个标准的库函数,它的函数原型在头文件“stdio.h”中,与pr ...

  2. SpringMVC中与Spring相关的@注解

    一.Spring的常用组件类注解 @Component    被该注解所修饰的类是一个普通的spring bean类,该注解可以替代@Controller.@Service.@Repository.在 ...

  3. 通过css3,实现加载转动贝塞尔曲线动画

    参考博客:http://blog.jobbole.com/94966/ css代码: .loading { position : relative; display : inline-block; w ...

  4. 让zepto支持slideup(),slidedown()

    zepto不支持slideup()和slidedown():使用以下方法可以支持该功能 <div class="slide"> <p> zepto不支持sl ...

  5. zip 的 压缩与解压

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xiananliu/article/details/23993481 zip格式是开源的相比rar格式 ...

  6. 转://Linux下区分物理CPU、逻辑CPU和CPU核数

    ㈠ 概念           ① 物理CPU                             实际Server中插槽上的CPU个数              物理cpu数量,可以数不重复的 p ...

  7. Shell命令解析

    1.简单语法: 执行shell:                                sh executeTest.sh puttyy上跑java:                      ...

  8. Windows线程的多任务处理

  9. python基础学习第五天

    li=[1,2,33,-1,'dbssd',[4,5,6],{4:'rfw',5:'re'}]del(li[1])print(li)print(type(li))#访问元素print(li[0])pr ...

  10. rbac组件

    创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...