最长有效括号

最长的有效括号序列长度 需求: 给定一个括号序列(只包括"("和")"),求其中最长的有效括号序列长度。 分析: 和判断括号序列是否是有效的算法方法一致,需要借助栈的先进后出的特性完成。 1、创建boolean型数组result[],result[i]代表角标i的序列符号是否是有效序列中的一员,初始化为false。 2、遍历括号序列,如果是左括号,就将左括号和其在序列中的角标存到栈中,如果是右括号,就判断栈 阅读详情

题目描述:

       给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。 举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。  再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。  再比如对于"( () () )",它的长度为6。换言之,便是有效双括号"()"数的两倍。 给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。                        

分析:这类题目,求最长的、最大的、最多的,一般都可以用贪心算法思想实现。尽可能的得到最优解。庞果里这道题目很容易令人误解,因为题目中没有说明有效括号是都连续的,所以有很多人第一时间会想到不是连续的,因此这样的想法纠错了。我刚开始也是这样想的,所以提交错了。在这个假期中,这些旧题就只能提交一次,如果以前提交了,那么现在就不能提交了,这个限制了我验证算法的真正确性。注:题目的有效括号是连续的。

      下面我就不连续、连续都将算法实现出来吧。这两个仅供参考,因为没有经实际题目提交验证过,所以有什么不对的,望各位帮忙指出!谢谢了!

  • 不连续的最长有效括号

    算法思想:

首先找到最左边的左括号s[i]='(',然后向后查找距离最近的右括号s[j]=')',(其中0<=i<j<n)。如果没有找到,即是s[j]='(',那么令i=j,同事j++。重复该步骤的去找出一对括号。如果找到了,则将计数counts+=2,并使用s[i]=s[j]='0'记录该括号已经使用,然后回溯i,直到s[i]='('为止,然后继续下一对括号寻找。直到i=len(s)为止,退出循环,返回最长有效括号数。

算法如下:

int longestValidParentheses(char *s)
{
	int i, j, k,counts=0;
	int len = strlen(s);
	for ( i = 0; i < len; i++)
	{
		if (s[i]=='(')
		{
			for (j = i; j < len; j++)
			{
				if (s[j]==')')
				{
					counts+=2;
					s[j] =s[i]= '0';
					while (s[i--]=='0' && i>=0){}
					break;
				}
				else if (s[j] == '(')
				{
					i = j;
				}
			}
		}
	}
	return counts;
}
  •      连续的有效括号长度

      算法思想:

    1. 首先去除无效的左边的右括号和无效的右边的左括号。
    2. 如果s[i]='(',那么左括号计数left+1,并且在left==0的时候记录下表k=i,以备以后回溯使用。
    3. 如果left>0并且s[i]=')',那么将右括号计数right+1,同时左括号计数left-1。
    4. 如果left==0并且s[i]==')'或者i==h,那么选择最长有效括号长度,即max=right>max?right:max;,接着将right清零,再回溯l=k。然后判断i是否等于h,如果是,则配对结束,否则继续回溯。
    5. 最后返回max*2即是最长有效括号长度。

     算法实现如下:

int longestValidParentheses(char *s)
{
	int i,k, l,h;
	int left = 0, right = 0, max = 0;
	l = -1;
	h = strlen(s);
	while (s[++l]==')' && l<h){}//去掉左边的右括号
	while (s[--h]== '(' && h>l){}//去掉左边的右括号
	for (i = l; i <= h; i++)
	{
		if (s[i] == '(') { if (left == 0) k = i;  left++; }
		if (left>0 && s[i] == ')') { right++; left--; }
		if ((left==0 && s[i]==')') || i==h)
		{
			if (right > max) max = right;
			right = 0;
			l = k;
			if (i == h)   break;
		}
	}
	return max*2;

}


   







避坑指南:ESP32S3驱动INMP441麦克风时的常见硬件冲突与解决方案 本文详细解析了ESP32S3驱动INMP441麦克风时常见的硬件冲突问题,包括GPIO资源冲突、电源噪声、I2S时钟同步等,并提供了实用的解决方案和优化策略。通过实测数据和代码示例,帮助开发者快速排查和解决音频设备开发中的疑难问题,提升系统稳定性和音频质量。 阅读详情

相关推荐

TypeScript版LangChain环境配置全攻略:从零搭建AI应用开发环境

大语言模型(LLM)作为当前AI应用开发的核心技术,通过API接口为开发者提供了强大的自然语言处理能力。其工作原理基于Transformer架构,通过预训练和微调实现对人类语言的深度理解与生成。在工程实践中,开发者需要将LLM与外部工具、数据源和业务逻辑有效集成,这正是LangChain框架的技术价值所在——它提供了标准化的组件和接口,简化了复杂AI应用的构建流程。应用场景涵盖智能客服、内容生成、数据分析助手等多个领域。本文聚焦于TypeScript/JavaScript生态下的LangChain开发,详细

weixin_29055699的博客 253

有效的括号

题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: (1)左括号必须用相同类型的右括号闭合。 (2)左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 ...

红烧咸鱼的博客 1619

手把手教你用RC桥式振荡器生成1Hz-1MHz正弦波(附完整电路图)

本文详细介绍了如何从零构建RC桥式振荡器,实现1Hz-1MHz正弦波的生成。通过核心元件选型、参数设计、电路搭建与优化等步骤,帮助读者掌握振荡器的工作原理和实战技巧。特别适合电子实验和信号处理领域的初学者和工程师,附完整电路图和常见问题解决方案。

weixin_30338481的博客 468

Leetcode-有效的括号(带图)

20. 有效的括号 - 力扣(LeetCode)20. 有效的括号 - 力扣(LeetCode)

2302_78381559的博客 1269

QQ的TEA填充算法C#实现 By Red_angelX

注:本人只是从LUMA QQ的 Source Code里面把相应Java语言翻译成C#,纯技术研究,并没有对TC产品做任何逆向分析,不承担任何法律责任!转载请保持本文完整性网上有c/c++,vb,delphi,java,perl各种版本的tea填充算法,唯独没有C#的,这让我这种狂热喜爱C#的人如何承受,于是,花3天时间看了各种代码经历无数失败的挫折终于用C#完成了该填充算法,废话不多说,直接

Red_angelX的专栏 1万+

SQL-拼多多 面试题:连续3次为球队得分的球员名单

1.使用LAG开窗函数 筛选出 下一次和下下一次得分,并用进球时间进行排序。2.使用where筛选出值得嘉奖的球员。

Ftr1998的博客 644

20210511力扣第32题:最长有效括号(四种方法解)

题目 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 输入:s = "(()" 输出:2 解释:最长有效括号子串是 "()" 输入:s = ")()())" 输出:4 解释:最长有效括号子串是 "()()" 输入:s = "" 输出:0 提示: 0 <= s.length <= 3 * 104 s[i] 为 '(' 或 ')' 题目理解: 这里说的是最长有效子串,返回长度,看一个例子: () ) ()()() 中间应该没有空格,我加上了,

EenKine的博客 1181

【skill】漫剧 AI 视频创作的知识库 + API 调用手册

方案适用场景在对话中使用,自动触发注入到任何 LLM(Cursor/Windsurf/Claude API)Python 模块集成到自动化管线/批量生成GitHub 又限速了,不过前几轮搜到的已经够用了。根据搜索结果,结合已分析过的项目,给你整理完整对比 🐮。

突围 994

Java实现 LeetCode 32 最长有效括号

32. 最长有效括号 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-...

南 墙 1万+

Vue3+Openlayers教程导航页【目录】

欢迎来到 Vue3+Openlayers 系列教程,这里是我在 优快云 编写的所有 Vue3+Openlayers 系列相关文章的索引页,适合初学者到进阶用户系统阅读。👀 更多教程正在持续更新中,欢迎关注我,一起探索 Openlayers 的强大魅力!

小彭的博客 1273

基于粒子群优化的PID控制在药液流量控制系统中的应用

本文提出了一种基于粒子群优化(PSO)的PID控制算法,用于药液流量控制系统。系统采用C37控制器和Codesys 2.3编程环境实现,通过传感器实时监测流量、压力和车速,并控制水泵占空比和电动球阀开度来精确调节药液流量。硬件配置包括FT-2000流量传感器、PT-3000压力传感器和MV-500电动球阀等。控制算法将PSO与PID结合,使用ITAE指标优化PID参数,在Codesys中实现了包含PSO优化循环、PID控制等功能的程序模块。该系统通过分层控制策略和智能优化算法,提高了药液流量控制的精度和响应

AI的内部世界的博客 250

32. 最长有效括号

32. 最长有效括号 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 思路 动态规划 假定dp[i]表示以i为结尾的最长有效括号,只需考虑’)’,当s[i-1]==’(‘时,dp[i]=dp[i-2]+2(注意边界条件),当s[i-1]==’)‘时,需要考虑s[i-dp[i-1]-1],当s[i-dp[i-1]-1]==’('时,dp[i]=dp[i-1]+dp[i-dp[i-1]-2]+2。 代码 class Solution { public: int l

weixin_38688399的博客 2974

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3604

LeetCode - 最长有效括号

题目描述 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 方法一:栈 思路 1、栈用来保存读取到的括号的下标,而不是括号字符。初始时为了统一现在栈底将-1入栈,以便第一个遇到右括号与之后遇到的情况保持统一的处理 2、保持栈底元素为最后一个没有被匹配的右括号下标(初始是-1,一但-1出栈,之后栈底

qq_34599349的博客 1283

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode最长有效括号

LeetCode: Longest Valid Parentheses 问题描述 Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. Example1 Input: s = “(()” Output: 2 Explanation: The longest valid parentheses su

weixin_44260108的博客 842

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[leetcode] 32. 最长有效括号

[leetcode] 32. 最长有效括号

lvhao123456789的博客 1182

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 解析dijkstra求最短路径
下一篇: 解析Bellman-Ford算法求最短路径
wingahi
博客等级 码龄15年 15粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值