LeetCode--32. 最长有效括号(栈)
最长有效括号(栈)
- 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. 最长有效括号(栈)相关推荐
- Leetcode 32 最长合法括号子序列
算法特辑–动态规划 Leetcode 32 最长合法括号子序列 给定只有"(" 和 ")" 的字符串,求出最长的合法括号子序列. 例如:"())&qu ...
- leetcode:32. 最长有效括号
32. 最长有效括号 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/longest-valid-parentheses/ 给你一个只包含 '(' 和 ...
- LeetCode 32. 最长有效括号(栈DP)
文章目录 1. 题目信息 2. 栈 解题 3. 动态规划 解题 1. 题目信息 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1:输入: "(() ...
- LeetCode 32最长有效括号(困难)
维护不易,还请点个赞赞,如果想加入还请关注公众号bigsai回复进群加入打卡. 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: &qu ...
- Leetcode 32.最长有效括号
最长有效括号 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 " ...
- leetcode 32. 最长有效括号
题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()& ...
- LeetCode 32 最长有效括号
https://leetcode-cn.com/problems/longest-valid-parentheses/ 解决方案 class Solution {public int longestV ...
- 32. 最长有效括号
32. 最长有效括号 题目描述 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例1: 输入:s = "(()" 输出:2 解释:最 ...
- 【LeetCode笔记】32. 最长有效括号(Java、动态规划、栈、字符串)
文章目录 题目描述 代码 & 解析 1. 栈做法 2. 动态规划 题目描述 (括号题真的好烦人) 讲道理,题目一看,大概率就是用dp做 代码 & 解析 1. 栈做法 这个做法我没实际写 ...
- [力扣]32. 最长有效括号(三解法)
解法一:栈 class Solution:def longestValidParentheses(self, s: str) -> int:q = []st = -1res = 0for i i ...
最新文章
- JS文本框默认值处理
- 22 款设计和可视化神经网络的工具
- 庄小威、陈志坚等9位科学家分享2100万美元奖金:2019年科学突破奖公布
- mysql二分法查找亿行_算法——二分法查找(binarySearch)
- “贵妇”必备的高价糖水,我给燕窝上了10年智商税
- vc++中ListBox用法
- 大型网站架构演进(4)使用应用服务器集群
- 关于计算机的内存的一点常识
- 企业财务报表分析【2】
- 【UI界面开发】背包系统一般思路
- Java 将控制台输出打印 输出到本地文件
- android jpct ae教程,android OpenGL开发使用JPCT-AE引擎显示3D立方体
- [安装之1] dell设置从ssd启动_如何进bios设置ssd固态硬盘为第一启动
- 我国成功研制出巨型计算机,1989年11月17日 我国首台小巨型电子计算机研制成功...
- Rocky Linux一个可用于生成环境的Linux
- mysq学习课堂笔记 第一天学习(值得收藏!)
- 直接最小二乘法拟合椭圆
- 【DOTS学习笔记】从第一个Jobs程序入门
- Vue2(九):浏览器本地存储、组件自定义事件、TodoList自定义事件
- java geometry mysql_java程序操作Geometry对象
热门文章
- php判断与网站访问时间,织梦CMS模板用php判断某个时间段显示和隐藏内容
- android 字符串转浮点,Android String类型转换为float、double和int的工具类方法
- oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包
- 寻找两个有序数组中的中位数
- FragmentTabHost切换Fragment时保存状态,避免切换Fragment走onCreateView和onDestroyView方法;...
- Elasticsearch下安装ik分词器
- 2016-2017-2 20155322 实验五 网络编程与安全
- bzoj 4278 Tasowanie 后缀数组+贪心
- typedef 浅析
- Sphinx语音识别学习记录 (五)-错误调试