当前位置: 首页 > news >正文

Longest Valid Parentheses(动态规划)

Longest Valid Parentheses

更多技术博客 http://vilins.top/

题目

Given a string containing just the characters ‘(’ and ‘)’, find the length of the longest valid (well-formed) parentheses substring.

Example 1:

Input: “(()”
Output: 2
Explanation: The longest valid parentheses substring is “()”
Example 2:

Input: “)()())”
Output: 4
Explanation: The longest valid parentheses substring is “()()”

分析

在这里我们用一个longest_curr数组去保存当前下标前连续匹配的括号的数量,注意这里是连续出现的括号。
接下来我们需要找出状态转移方程,当字符串的字符为’)‘时可能意味着状态的改变,所以我们的判断条件是在’)‘时进行的。
具体来说,在下标i之前的longest_curr值都已经被求出来了,那么对于下标为并且是’)'的字符,有如下状态转移方程:

longest_curr[i] = longest_curr[i - longest_curr[i-1] - 2] + 2 + longest_curr[i-1];

longest_curr[i - longest_curr[i-1] - 2]是指在这个整体匹配之前已经匹配的字符数量,
longest_curr[i-1]指存在这样的情况“()(())",longest_curr[i-1]指计算(()),这个符合中间的这两个。
最后需要考虑的一点就是下标的界限问题。

源码

class Solution { public: int longestValidParentheses(string s) { int size = s.size(); int max_num = 0; vector<int> longest_curr(size, 0); if(s.size() <= 1) { return 0; } for(int i =1; i < size; i++) { if(s[i] == ')' && ((i - longest_curr[i-1] - 1) >= 0) && s[i - longest_curr[i-1] - 1] == '(') { if(i - longest_curr[i-1] - 2 >= 0) { longest_curr[i] = longest_curr[i - longest_curr[i-1] - 2] + 2 + longest_curr[i-1]; } else { longest_curr[i] = 2 + longest_curr[i-1]; } max_num = max(max_num, longest_curr[i]); } } return max_num; } };

更多技术博客 http://vilins.top/

http://www.jsqmd.com/news/933321/

相关文章:

  • OrCAD端口转换补丁实测:一键切换Port与Off-Page Connector,附详细安装避坑指南
  • STM32F030C8T6直接可用的W25Q128 SPI Flash驱动工程(Keil MDK-ARM v5,含.hex和完整CubeMX项目)
  • 2026年亲测AI论文写作软件榜单(安全合规版)
  • Sora 2配音与Premiere Pro/FCPX/Davinci Resolve无缝协同指南,附官方未文档化的Timecode Injection协议
  • 2026年近期想找温州老爹鞋直销厂商?这五家实力供应商值得关注 - 2026年企业资讯
  • LeetCode--Search a 2D Matrix II(分治策略)
  • 从漆包线到发光盆景:手工焊接1206贴片LED的电子艺术实践
  • 基于Arduino与NeoPixel的智能光剑制作:从电路设计到3D打印全流程
  • 如何快速掌握Illustrator脚本:提升设计效率的完整实战指南
  • 新手也能搞定!用ADS 2023一步步仿真LNA的直流偏置与稳定性(附原理图)
  • 2026年5月无溶剂环氧涂料工厂推荐,环氧酚醛/光固化保护套/石墨烯涂料/无溶剂环氧涂料,无溶剂环氧涂料批发厂家怎么选 - 品牌推荐师
  • FortiGate 7.4.2 新机开箱第一步:从接上网线到设置中文界面的保姆级避坑指南
  • Spring Boot 3 + Swagger 3 + Knife4j 4.1.0:从配置到美化,打造团队都爱用的API文档(避坑指南)
  • 如何免费永久保存微信聊天记录:WeChatMsg终极完整使用指南
  • WSL2 Ubuntu 20.04 装完Docker报错?别慌,一个命令切换iptables模式就能搞定
  • Unique Paths II(动态规划)
  • 格式规范否?8款AI论文写作工具梯队榜,毕业答辩稳了!
  • 【Sora 2倒放视频生成黑科技】:全球仅3家实验室验证的时序逆向建模方法首度公开
  • 2026年6月,北京花洒置物平台服务商深度解析:为何恒洁卫浴成为品质之选? - 2026年企业资讯
  • 统计思维实战自测:提升数据决策力,避开常见认知陷阱
  • AI生成图能注册版权吗?(美国版权局2023-2024全部裁定原文深度拆解)
  • 保姆级教程:用Python和Pandas快速上手UJIIndoorLoc室内定位数据集
  • 2026年管道式电磁流量计TOP5选型参考名录:管道式电磁流量计、蒸汽涡街流量计、超声波液位计、一体化温度变送器选择指南 - 优质品牌商家
  • FreeSWITCH新手避坑指南:第一次用fs_cli必须知道的3个关键点和1个危险操作
  • 网络编程的三要素
  • 惊了!输入题目,这几款AI写作辅助软件就能生成图文并茂的毕业论文
  • 用micro:bit与舵机制作交互式纸板机器人:从电容触摸到机械传动
  • OV系列摄像头SCCB总线配置避坑指南:从三线到两线,时序参数怎么调才稳定?
  • 告别VCP!用FTDI D2XX库直接驱动MPSSE引擎(以FT2232H为例,含C++/Qt代码)
  • 别再只跑默认参数了!TransDecoder 5.7.1高级参数调优与结果深度解读指南