Leetcode——32.最长有效括号【##】
@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.最长有效括号【##】的更多相关文章
- LeetCode 32. 最长有效括号(Longest Valid Parentheses) 31
32. 最长有效括号 32. Longest Valid Parentheses 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 每日一算法2019/6/ ...
- Java实现 LeetCode 32 最长有效括号
32. 最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 & ...
- leetcode:32 最长有效括号
题目: 给一个包含了'(' 和 ')'的字符串,求出其中最长有效括号的长度. 做题情况:自己做出来,但做了较长的时间. 思路:可以算得穷举法的时间复杂度为O(n^3).虽然这题求的是最长的长度,但是 ...
- LeetCode 32. 最长有效括号(Longest Valid Parentheses)
题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "( ...
- Leetcode32. 最长有效括号
32. 最长有效括号 做法 \(f_{i}\)以\(i\)结尾的最长匹配 前提为\(s[i]=')'\) \(s[i-1]='('\),则\(f[i]=f[i-2]+2\) \(s[i-1]=')'\ ...
- [LeetCode] 32. Longest Valid Parentheses 最长有效括号
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
- LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)
题目链接: https://leetcode.com/problems/longest-valid-parentheses/?tab=Description Problem :已知字符串s,求出其 ...
- LeetCode(32):最长有效括号
Hard! 题目描述: 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 ...
- 【LeetCode 32】最长有效括号
题目链接 [题解] 设dp[i]表示以第i个字符结尾的最长有效括号的长度. 显然只要考虑s[i]==')'的情况 则如果s[i-1]=='(',则dp[i] = dp[i-2]+2; 如果s[i-1] ...
随机推荐
- Team Dipper
Team Dipper Dipper 来自追梦的7星,We Are From Now On! 说什么?图小了?没问题满足你! No.1 沉默深邃之境的术士,源自奥术之境的PHP探寻者 03150225 ...
- luogu P3293 [SCOI2016]美味
题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1<=i<=n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi .因此,第 ...
- 清空表与删除表mysql
Mysql清空表(truncate)与删除表中数据(delete)的区别 为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经被插入了几万条垃圾留言,如果一条条删除那可真是累人的活. ...
- pandas中的数值计算及统计基础
import pandas as pd import numpy as np df = pd.DataFrame({ 'key1': [4, 5, 3, np.nan, 2], 'key2': [1, ...
- PHP开发小技巧③—实现多维数组转化为一维数组
在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...
- go标准库的学习-io
参考https://studygolang.com/pkgdoc 导入方式: import "io" o包提供了对I/O原语的基本接口.本包的基本任务是包装这些原语已有的实现(如o ...
- go标准库的学习-crypto/rand
参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/rand" rand包实现了用于加解密的更安全的随机数生成器. Var ...
- metamask-mascara-在线钱包使用
网址为:https://wallet.metamask.io 这是一个在线钱包,可以看见,它是一个测试版的 输入你自己设置的一个密码,然后create 接着就会进入下面这个页面,然后next: 然后a ...
- nginx环境搭建
nginx安装步骤 安装nginx[root@insure opt]# yum install nginx启动nginx [root@insure opt]# service nginx start ...
- ubuntu 用remastersys 备份系统并且安装
sudo add-apt-repository ppa:mutse-young/remastersys 2.更新系统软件源 sudo apt-get update 3.更新完了,先安装remaster ...