最长有效括号(栈)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现

1. 题目描述

难度:困难

2. 题目分析

这道题与LeetCode–20. 有效的括号类似,LeetCode20要求的是找出字符串是否是有效的括号,我们利用的是模拟一个栈的方法以及删除法。这道题是来求最长有效括号,删除法就行不通了,但是我们仍然可以使用栈的方法来解决。
- 栈(C)
模拟一个栈的结构, 将字符挨个压入栈中,如果字符匹配则弹出数据,记录栈中的字符以及其对应的下标。遍历完字符串以后,栈中剩下的都是没有匹配的字符以及下标。根据这些下标计算出最大的有效括号长。时间复杂度O(N)。

3. C语言实现

代码如下

// 栈
int longestValidParentheses(char * s){int max = 0, index = 0;  // index为栈首元素的指针int len = strlen(s);if(len == 0 || len == 1) return 0;// 申请一个栈stack来存放要放入的字符,申请一个栈label来存放stack中字符对应的下标char* stack = (char *)malloc(sizeof(char)*(len+1));int* label = (int *)malloc(sizeof(int)*(len+1));stack[0] = s[0];stack[len] = '\0';label[0] = 0;for(int i = 1; i < len; i++){// 栈中无元素时if(index < 0){index++;stack[index] = s[i];label[index] = i;}// s[i]元素与栈首的字符匹配时,将栈首的字符弹出else if(s[i] != stack[index] && s[i] == ')'){index--;}// 否则,将s[i] 压入栈中else{index++;stack[index] = s[i];label[index] = i;}}// 最终,label中存放的下标都是没有匹配字符的下标,根据这些下标可以计算最长有效括号数if(index < 0) return len;else{label[index+1] = len;max = max > label[0]? max:label[0];for(int i = 0; i < index+1; i++){max = max > label[i+1]-label[i]-1? max:label[i+1]-label[i]-1;}}free(stack);free(label);return max;
}

运行结果如下:

LeetCode--32. 最长有效括号(栈)相关推荐

  1. Leetcode 32 最长合法括号子序列

    算法特辑–动态规划 Leetcode 32 最长合法括号子序列 给定只有"(" 和 ")" 的字符串,求出最长的合法括号子序列. 例如:"())&qu ...

  2. leetcode:32. 最长有效括号

    32. 最长有效括号 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/longest-valid-parentheses/ 给你一个只包含 '(' 和 ...

  3. LeetCode 32. 最长有效括号(栈DP)

    文章目录 1. 题目信息 2. 栈 解题 3. 动态规划 解题 1. 题目信息 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1:输入: "(() ...

  4. LeetCode 32最长有效括号(困难)

    维护不易,还请点个赞赞,如果想加入还请关注公众号bigsai回复进群加入打卡. 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: &qu ...

  5. Leetcode 32.最长有效括号

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

  6. leetcode 32. 最长有效括号

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

  7. LeetCode 32 最长有效括号

    https://leetcode-cn.com/problems/longest-valid-parentheses/ 解决方案 class Solution {public int longestV ...

  8. 32. 最长有效括号

    32. 最长有效括号 题目描述 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例1: 输入:s = "(()" 输出:2 解释:最 ...

  9. 【LeetCode笔记】32. 最长有效括号(Java、动态规划、栈、字符串)

    文章目录 题目描述 代码 & 解析 1. 栈做法 2. 动态规划 题目描述 (括号题真的好烦人) 讲道理,题目一看,大概率就是用dp做 代码 & 解析 1. 栈做法 这个做法我没实际写 ...

  10. [力扣]32. 最长有效括号(三解法)

    解法一:栈 class Solution:def longestValidParentheses(self, s: str) -> int:q = []st = -1res = 0for i i ...

最新文章

  1. 102. Binary Tree Level Order Traversal
  2. 和ur的区别_UR机械臂simscape正逆解仿真
  3. 复现经典:《统计学习方法》第 10 章 隐马尔可夫模型
  4. Halcon - 测量 - 轮廓到线的距离
  5. discuz php文件,discuz目录文件资料汇总
  6. 【Java】文件操作
  7. Apache Druid Console 远程命令执行漏洞
  8. 主子表对应的字段_Power Pivot针对表筛选的函数及差异
  9. (五)比赛中的CV算法(上2)目标检测初步:神经网络及优化方法
  10. python字符串去掉最后的逗号_拼接字符串时去掉最后一个多余逗号
  11. 【测绘程序设计】——角度与弧度的转换
  12. android蓝牙开启的通知,Android蓝牙LE通知的问题
  13. 关于 移动 电信 联通 运营商数据抓取 通话记录 京东淘宝学信网数据抓取 失信报告,网贷黑名单,央行征信报告数据抓取
  14. 海思HI3518E视频处理基础概念《二》----- 视频输入VI和 视频输出VO
  15. word输入(a)一敲空格就变自动编号
  16. 你有用过Type-C接口的手电筒吗?
  17. bam文件读取_SAM/BAM 格式文件内容解析
  18. 演讲实录丨朱频频 让Bots无处不在
  19. 【软件测试】接口——基本测试流程
  20. html里面a标签点击时去除下划线

热门文章

  1. python selenium 文件上传_python-selenium -- 文件上传操作
  2. 载入页面时与服务器的连接被重置。_快捷指令打不开怎么回事?安装快捷指令无法载入的解决办法...
  3. Apache的详细配置
  4. React-Native 组件开发方法
  5. 第1次在Flash Builder中写程序
  6. 《江南》、乌镇、《似水年华》
  7. MySql 你知道 order by 是怎么回事吗? MySql全字段排序与 rowid 排序
  8. Command 模式 Step by Step
  9. VC++ .net 2005运行库解析
  10. C# MVC 用户登录状态判断