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

最长有效括号 - LeetCode 热题 90

大家好!我是曾续缘🤪

今天是《LeetCode 热题 100》系列

发车第 90 天

动态规划第 10 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

最长有效括号

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

示例 1:

输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"

示例 3:

输入:s = ""
输出:0

提示:

  • 0 <= s.length <= 3 * 104
  • s[i]'('')'
难度:💝💝💝

解题方法

  • 使用一个数组 f 记录以每个字符结尾的最长有效括号子串的长度。
  • 遍历字符串 s,对于每个位置 i,我们尝试更新 f[i]
  • 如果 s[i]')',我们需要考虑两个情况:
    • 如果 s[i - 1]'(',那么当前的 ')' 可以和 i - 1 位置的 '(' 配对,这时候我们需要查看 i - 2 位置的有效括号长度(如果 i - 2 在数组范围内),然后加上当前的 2(因为包含当前的 ')')。
    • 如果 i - f[i - 1] > 0 并且 s[i - f[i - 1] - 1]'(',那么当前的 ')' 可以和 i - f[i - 1] - 1 位置的 '(' 配对,这时候我们需要更新 f[i]f[i - 1] + 2 + (i - f[i - 1] - 2 >= 0 ? f[i - f[i - 1] - 2] : 0)

Code

class Solution {public int longestValidParentheses(String s) {int n = s.length();int[] f = new int[n];for(int i = 1; i < n; i++){if(s.charAt(i) == ')'){if(s.charAt(i - 1) == '('){f[i] = (i >= 2 ? f[i - 2] : 0) + 2;}else if(i - f[i - 1] > 0 && s.charAt(i - f[i - 1] - 1) == '('){f[i] = f[i - 1] + ((i - f[i - 1]) >= 2 ? f[i - f[i - 1] - 2] : 0) + 2;}}}int ans = 0;for(int x : f){ans = Math.max(ans, x);}return ans;}
}

相关文章:

  • 2024.6.10 一
  • stream 流的一些底层实现原理
  • Java学习-MyBatis学习(一)
  • Jmeter函数二次开发说明
  • Springboot结合redis实现关注推送
  • 【Linux】进程程序替换
  • MSP430单片机控制流水灯,Proteus仿真
  • adb shell进入设备后的命令
  • [ZJCTF 2019]NiZhuanSiWei、[HUBUCTF 2022 新生赛]checkin、[SWPUCTF 2021 新生赛]pop
  • 【学习笔记】finalshell上传文件夹、上传文件失败或速度为0
  • 手机连接ESP8266的WIFI,进入内置网页,输入要显示的内容,在OLED显示屏上显示文本
  • 【C++题解】1457 - 子数整除
  • 内存卡执行格式化数据还能恢复吗?
  • qt自适应图片
  • [Vue3:axios]:实现登录跳转页面展示列表(查看教师所承担课程的学生选课情况)
  • 时间复杂度分析经典问题——最大子序列和
  • css系列之关于字体的事
  • HTTP中的ETag在移动客户端的应用
  • Javascript基础之Array数组API
  • java取消线程实例
  • Laravel核心解读--Facades
  • LeetCode29.两数相除 JavaScript
  • Linux快速复制或删除大量小文件
  • Material Design
  • node.js
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SpringBoot 实战 (三) | 配置文件详解
  • vue数据传递--我有特殊的实现技巧
  • 今年的LC3大会没了?
  • 前端_面试
  • 设计模式 开闭原则
  • 与 ConTeXt MkIV 官方文档的接驳
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​如何防止网络攻击?
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #13 yum、编译安装与sed命令的使用
  • #QT 笔记一
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)Jupyter Notebook 下载及安装
  • (C语言)fread与fwrite详解
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (计算机网络)物理层
  • (简单) HDU 2612 Find a way,BFS。
  • (十三)Flask之特殊装饰器详解
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ./configure,make,make install的作用(转)
  • .gitattributes 文件
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .net对接阿里云CSB服务
  • .NET下的多线程编程—1-线程机制概述
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解