LeetCode最长有效括号问题解

最长有效括号问题的封面图像解决方案
给定一个仅包含字符的字符串(’ 和 ‘)’,返回最长有效的长度(出色地-形成) 括号子弦。

示例1:

输入:s = “(()”
输出:2
说明:最长的有效括号子字符串是 “()” 。

示例2:

输入:s = “)()())”
输出:4
说明:最长的有效括号子字符串是 “()()” 。

示例3:

输入:s = “”
输出:0

约束:

0 <= s.length <= 3* 104
s[i] 是 ‘(’, 或者 ‘)’。

解决方案 :

方法
在这里,方法无非是我们使用堆栈,当我们遇到开头支撑时,我们将其索引推入堆栈中,每当我们触摸闭合支架时,我们就会看到堆栈的顶部,如果它的大小是一个,则意味着闭合括号已经统治了开头括号。然后,我们将堆栈的最高值编辑为闭合支架的索引。
如下所示,图片清楚地描绘了此方法。

图片描述

  • 在这里给出作为行Ans = max给出的答案(ans,索引- stk.top()) 只有当堆栈的大小不是1时,就会遇到闭合支架。

代码

class Solution {
public:int longestValidParentheses(string s) {stack<int>stk;stk.push(-1);int ans = 0;for(int i = 0 ; i < s.size();  i++){if(s[i] == '(')stk.push(i);else{if(stk.size() == 1)stk.top() = i;else{stk.pop();ans = max(ans , i - stk.top());}}}return ans;}
};
class Solution {public int longestValidParentheses(String s) {int leftCount = 0;int rightCount = 0;int maxLength = 0;for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == '(') {leftCount++;} else {rightCount++;}if (leftCount == rightCount) {maxLength = Math.max(maxLength, 2 * rightCount);} else if (rightCount > leftCount) {leftCount = rightCount = 0;}}leftCount = rightCount = 0;for (int i = s.length() - 1; i >= 0; i--) {if (s.charAt(i) == '(') {leftCount++;} else {rightCount++;}if (leftCount == rightCount) {maxLength = Math.max(maxLength, 2 * leftCount);} else if (leftCount > rightCount) {leftCount = rightCount = 0;}}return maxLength;}
}
class Solution:def longestValidParentheses(self, s: str) -> int:stack=[]l=['0']*len(s)for ind,i in enumerate(s):if i=='(':stack.append(ind)else:if stack:l[stack.pop()]='1'l[ind]='1'return max(len(i) for i in ''.join(l).split('0'))

复杂

  • 时间复杂性:这里的复杂性是 o ( n ) o(n) o(n),因为我们仅使用一个只有一个带有堆栈的循环,因此它以线性复杂性运行。
  • 空间复杂性:这里的空间复杂性将为$ o(n)$,因为我们只使用了一个堆栈,它也将元素也存储在最坏的情况下,因此可以使人变得复杂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616120.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应该如何进行POC测试?—【DBA从入门到实践】第三期

在数据库选型过程中&#xff0c;为确保能够灵活应对数据规模的不断扩大和处理需求的日益复杂化&#xff0c;企业和技术人员会借助POC测试来评估不同数据库系统的性能。在测试过程中&#xff0c;性能、并发处理能力、存储成本以及高可用性等核心要素通常会成为大家关注的焦点&am…

单链表详解(无哨兵位),实现增删改查

1.顺序表对比单链表的缺点 中间或头部插入时&#xff0c;需要移动数据再插入&#xff0c;如果数据庞大会导致效率降低每次增容就需要申请空间&#xff0c;而且需要拷贝数据&#xff0c;释放旧空间增容造成浪费&#xff0c;因为一般都是以2倍增容 2.链表的基础知识 链表也是线…

【从浅学到熟知Linux】环境变量详谈(含使用程序获取环境变量的3种方法、如何查看环境变量)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 环境变量基本概念查看环境变量的方法环境变量相关命令环境变量组织方式及获取环境变量的3种方法验…

JVM面试整理--对象的创建和堆

文章目录 对象的创建过程是怎样的?对象在内存中的结构是怎样的&#xff08;专业的叫法&#xff1a;对象的内存布局&#xff09;对象在内存分配时使用的哪种方式&#xff08;有的地方也称为&#xff1a;分配算法&#xff09;知道什么是“指针碰撞”吗&#xff1f;知道什么是“空…

功能测试_订购单检查_判定表

画判定表的步骤&#xff1a; 列出条件 列出动作

ssm048电子竞技管理平台的设计与实现+jsp

电子竞技管理平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电子竞技管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

ThingsBoard通过服务端获取客户端属性或者共享属性

MQTT基础 客户端 MQTT连接 通过服务端获取属性值 案例 1、首先需要创建整个设备的信息&#xff0c;并复制访问令牌 ​2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、通过服务端获取属性值 5、在客户端查看对应的客户端属性或者共享属性的key 6、查看整个…

Cesium.js--》探秘Cesium背后的3D模型魔力—加载纽约模型

今天简单实现一个Cesium.js的小Demo&#xff0c;加强自己对Cesium知识的掌握与学习&#xff0c;先简单对这个开源库进行一个简单的介绍吧&#xff01; Cesium 是一个开源的地理空间可视化引擎&#xff0c;用于创建基于 Web 的三维地球应用程序。它允许开发人员在网页上呈现高度…

C++设计模式:代理模式(十三)

1、代理模式 定义&#xff1a;为其他对象提供一种代理以控制&#xff08;隔离使用接口&#xff09;对这个对象的访问等。 动机 在面向对象系统中&#xff0c;有些对象由于某种原因&#xff08;比如对象需要进程外的访问等&#xff0c;例如在分布式的系统中&#xff09;&#x…

5G Frequency Bands 频率分布

连接&#xff1a;https://www.5g-networks.net/5g-technology/5g-frequency-bands/

基于springboot+vue实现的药品信息管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

意得辑真不错

意得辑真不错&#xff0c;85喆优惠码延长到25.12.31了我用editage意得辑润色SCI已经第4年了&#xff0c;今天他家的学术支持老师让我写几句感受&#xff0c;那我真的感受太多了。因为下单太多一度被导师怀疑是在他家套经费。22年刚读博同时润色了三篇&#xff0c;被导师叫到办公…