原题链接

题意:

寻找配对的(),并且返回最长可成功配对长度。

思路

配对的()必须是连续的,比如()((),最长长度为2;()(),最长长度为4。

解法一 dp:

利用dp记录以s[i]为终点时,最长可配对长度。

仅当遍历到s[i]==’)'的时候记录。

dp[i]=dp[i-1]+2 		加上当前组其他对的长度
dp[i]+=dp[i-dp[i]] 加上邻近的上一组的总长度

class Solution {
public:
int longestValidParentheses(string s) {
int len = s.length();
if (len < 2) return 0;
vector<int> dp(len, 0);
int res = 0;
for (int i = 1; i < len; i++) {
if (s[i] == ')') {
if (s[i - 1 - dp[i - 1]] == '(') // 判断当前')'有没有相对应位置的'('
dp[i] = dp[i - 1] + 2; // 如果有:则当前小组数量增加
dp[i] += dp[i - dp[i]]; // 加上上一个小组记录的数量
}
res = max(res, dp[i]);
}
return res;
}
};

解法二 栈:

用栈去存储"(“的索引位置。

遍历字符串,

当前符号为”(“时,加入栈;

当前符号为”)"时,弹出栈顶元素,并进行判断:

——>当栈为空:说明当前所有匹配都匹配成功,长度为i+1;(i从0开始计)

——>当栈不为空:长度为max(answer,i-stack.top())

class Solution {
public:
int longestValidParentheses(string s) {
int res = 0;
int len = s.length();
stack<int> sta;
for (int i = 0; i < len; i++) {
if (!sta.empty() && s[i] == ')' && s[sta.top()] == '(') {
sta.pop();
if (sta.empty())
res = i + 1;
else
res = max(res, i - sta.top());
} else {
sta.push(i);
}
}
return res;
}
};

[LeetCode] 32. Longest Valid Parentheses (hard)的更多相关文章

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

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

  2. leetcode 32. Longest Valid Parentheses

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

  3. Java [leetcode 32]Longest Valid Parentheses

    题目描述: Given a string containing just the characters '(' and ')', find the length of the longest vali ...

  4. [leetcode]32. Longest Valid Parentheses最长合法括号子串

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

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

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

  6. [Leetcode][Python]32: Longest Valid Parentheses

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 32: Longest Valid Parentheseshttps://oj ...

  7. leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、

    20. Valid Parentheses 错误解法: "[])"就会报错,没考虑到出现')'.']'.'}'时,stack为空的情况,这种情况也无法匹配 class Soluti ...

  8. [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)

    指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Lon ...

  9. 刷题32. Longest Valid Parentheses

    一.题目说明 题目是32. Longest Valid Parentheses,求最大匹配的括号长度.题目的难度是Hard 二.我的做题方法 简单理解了一下,用栈就可以实现.实际上是我考虑简单了,经过 ...

随机推荐

  1. RapidJSON 1.0 正式版发布,C++的JSON开发包

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  2. 百度 Echarts 地图表 js 引用路径

    使用地图表格,除了需echarts,还需zrender,自行下载JS文件:   目标,做成这样的效果:http://echarts.baidu.com/doc/example/map3.html   ...

  3. 分布式自增ID算法snowflake (Java版)

    概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种 ...

  4. Hadoop集群(第5期)SecureCRT使用

    1.SecureCRT简介   SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议.SecureCRT是一款用于连接运行包括Windows. ...

  5. IT职场初体验一

    自己学习计算机专业也算有两个年头了吧,对于这个刚刚IT入门的菜鸟,对IT职场充满了好奇和憧憬,本人大学也像很多大学生一样,进入计算机专业也不是自己最初想进入的专业,进入这个原本离自己有点遥远的行业,一 ...

  6. python列表的内置方法

    list数据类型还有更多的方法.这里是list对象的所有方法: list.append(x) 添加一个元素到列表的末尾:相当于a[len(a):] = [x]. list.extend(L) 将指定列 ...

  7. FPM

    https://github.com/pangudashu/php7-internal/blob/master/1/fpm.md

  8. 3D echarts 点位报表展示

    一,准备工作1)获取Echarts 以下为官网推荐的几种获取 ECharts方式: 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求, ...

  9. GRPC与.net core

    系列章节 GRPC与.net core GRPC截止时间与元数据 GRPC与netcore Identity GRPC与netcore IdentityServer4 概述 GRPC的数据交互模式有: ...

  10. Go语言学习——channel的死锁其实没那么复杂

    1 为什么会有信道 协程(goroutine)算是Go的一大新特性,也正是这个大杀器让Go为很多路人驻足欣赏,让信徒们为之欢呼津津乐道. 协程的使用也很简单,在Go中使用关键字“go“后面跟上要执行的 ...