【LeetCode热题100】32. 最长有效括号(动态规划)

一.题目要求

给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

二.题目难度

困难

三.输入样例

示例 1:
输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”

示例 2:
输入:s = “)()())”
输出:4
解释:最长有效括号子串是 “()()”

示例 3:
输入:s = “”
输出:0

提示:

  • 0 <= s.length <= 3 * 104
  • s[i] 为 ‘(’ 或 ‘)’

四.解题思路

  1. 有效括号分两种情况:
    • ( ) ( ) ()() ()() ,长度为 4 4 4
    • ( ( ) ) (()) (()) ,长度为 4 4 4 ,也是有效的
  2. 状态转移 d p [ i ] dp[i] dp[i] 表示 i i i 位置作为字符串结尾的情况下,字符串开头向左延伸出连续有效的子串长度
  3. 考虑上述两种情况后,状态转移的递推如下:
    • i i i 位置为左括号 ( ( ( , 则 d p [ i ] dp[i] dp[i] 一定是 0 0 0 ,因为有效子串必须以右括号 ) ) ) 结束。

    • i i i 位置为右括号 ) ) ) , 此时需要按照 1. 中两种有效括号的形式进行分类讨论:

      1. i − 1 i - 1 i1 位置是 左括号 ( ( (,此时 d p [ i ] dp[i] dp[i] 的值为 2 + d p [ i − 2 ] 2\,+\,dp[i-2] 2+dp[i2] ,若 i − 1 i-1 i1 小于 0 0 0,则为 2 2 2
      2. i − 1 i - 1 i1 位置是 右括号 ) ) ),此时 d p [ i ] dp[i] dp[i] 的值为公式
        d p [ i ] = { 0 i − 1 − d p [ i − 1 ] < 0 或 s [ i − 1 − d p [ i − 1 ] ] = ′ ) ′ d p [ i − 1 ] + 2 ( i − d p [ i − 1 ] − 2 ) < 0 到左边界了 d p [ i − 1 ] + 2 + d p [ i − d p [ i − 1 ] − 2 ] ( i − d p [ i − 1 ] − 2 ) ≥ 0 相当于接上了之前的串 dp[i] =\begin{cases} 0 & i - 1 - dp [i-1] <0 \,或\,s[ \,i - 1 - dp [i-1]] = ')' \\\\dp[i - 1] + 2 & (i - dp [i - 1] - 2) < 0 \,到左边界了 \\ \\dp[i - 1] + 2 +dp[i - dp [i - 1] - 2] & (i - dp [i - 1] - 2) \geq 0 \,相当于接上了之前的串 \end{cases} dp[i]= 0dp[i1]+2dp[i1]+2+dp[idp[i1]2]i1dp[i1]<0s[i1dp[i1]]=)(idp[i1]2)<0到左边界了(idp[i1]2)0相当于接上了之前的串

      对应三种情况:
      在这里插入图片描述

五.代码实现

class Solution {
public:int longestValidParentheses(string s) {vector<int> dp(s.size(), 0);int len = 0;//dp[i] : 子串必须以i位置的字符结尾的情况下,往左最多推多远能整体有效for(int i = 1; i < s.size(); i++){if(s[i] == ')'){if(s[i - 1] == '('){dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;}else if(s[i - 1] == ')'){if(i - 1 - dp [i - 1] >= 0 && s[i - 1 - dp [i - 1]] == '(')dp[i] = dp[i - 1] + 2 + ((i - dp [i - 1] - 2) >= 0 ? dp[i - dp [i - 1] - 2] : 0);}}len = max(dp[i] , len);}//for(auto v:dp) cout<<v<<endl;return len;}
};

六.题目总结

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

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

相关文章

物联网行业趋势——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和应用场景的日益扩大&#xff0c;物联网行业呈现出迅猛发展的势头。作为当今世界最具前瞻性和战略意义的领域之一&#xff0c;物联网行业的趋势和未来发展值得深入探讨。 ​一、物联网行业正逐渐实现全面普及。随着物…

泡泡写作怎么用 #经验分享#微信

泡泡写作是一款非常好用的论文写作工具&#xff0c;它可以帮助用户检测论文的相似度并进行降重&#xff0c;减少抄袭和重复引用的问题&#xff0c;是学生和研究人员们写作过程中的得力助手。 使用泡泡写作非常简便方便。用户只需要将待检测的论文文本复制粘贴到工具中&#xff…

Qt/C++项目 学生成绩管理系统

直观的 QT 图形界面&#xff1a;采用 QT 构建的用户友好界面&#xff0c;提供清晰的菜单选项&#xff0c;确保用户轻松导航和访问各项功能。 数据库驱动的数据存储&#xff1a;系统使用数据库技术安全高效地存储学生信息&#xff0c;保障数据的完整性和可靠性。 全面的基本功…

017——DS18B20驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 主要特点 1.3 存储器介绍 1.4 时序 1.5 命令 1.5.1 命令大全 1.5.2 命令使用 1.5.3 使用示例 1.6 原理图 二、 驱动程序 三、 应用程序 四、 测试 一、 模块介绍 1.1 简介 DS18B20 温度传感器具有线路简单、体积小的特点&…

MagicHut 工具分享

设计师必备工具 与全球一流设计师交流&#xff0c;分享在全世界的一流设计网站上展示作品&#xff0c;寻找灵感 免费拥有超过 20,000 TB 的设计师素材 免费下载行业设计工具&#xff0c;软件 其实是可以让你拥有魔法&#xff0c;免费使用&#xff0c;每天签到就行&#xff0c;…

2024/4/1—力扣—BiNode

代码实现&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/void convertBiNode_pro(struct TreeNode *root, struct TreeNode **p) {if (root) {convertBiNode_pro(roo…

Python—循环加强

1.使用循环打印等腰三角形 # 画三角形层数为n # 第i层有空格&#xff1a;n-i # 第i层有*&#xff1a;2*i-1 n int(input("层数&#xff1a;"))#层数n for i in range(1, n 1):#范围在1~n# 画空格for _ in range(1, n - i 1): # _不用显示&#xff0c;用于表示&a…

windows下使用的的数字取证工作工具套装:forensictools

推荐一套windows下使用的的数字取证工作工具套装&#xff1a;forensictools 部分工具包括&#xff1a; ▫️exiftool&#xff0c;一个命令行应用程序和 Perl 库&#xff0c;用于读写元信息。 ▫️YARA&#xff0c;一款开源工具&#xff0c;用于对恶意软件样本进行识别和分类。…

2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024)

2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024) 会议简介 智能计算、大数据应用与信息科学之间存在相互依存、相互促进的关系。智能计算和大数据应用的发展离不开信息科学的支持和推动&#xff0c;而信息科学的发展又需要智能计算和大数据应用的不断拓展和应用。智…

如何选择苹果iOS系统的企业签名分发平台

哈喽&#xff0c;大家好呀&#xff0c;淼淼有和大家见面啦&#xff0c;前两期讲了分发内测的一些相关知识&#xff0c;这一期咱们来聊聊企业签名分发平台的相关知识。最近移动应用市场的竞争一天比一天要激烈&#xff0c;许多做开发的小伙伴们都在为此发愁&#xff0c;愁着该怎…

Splatstudio 学习笔记

1. 3DGS 是全图的Render, 因此特地写了 full_images_datamanger.py 每个step 取出一张图像。 返回值是一张 全图的 RGB 和对应的 Camera 2. 3D GS 没有生成光线&#xff0c;因此 不需要指定near 和 far&#xff0c;即 collider是None。 但需要对3D 高斯球进行初始化&#xff…

Django检测到会话cookie中缺少HttpOnly属性手工复现

一、漏洞复现 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本等)获取到用户的cookie信息&#xff0c;造成用户cookie信息泄露&#xff0c;增加攻击者的跨站脚本攻击威胁。 第一步&#xff1a;复制URL&#xff1a;http://192.168.43.219在浏览器打开&#xff0c;…