力扣hot100 最长有效括号 动态规划

这篇具有很好参考价值的文章主要介绍了力扣hot100 最长有效括号 动态规划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem: 32. 最长有效括号
力扣hot100 最长有效括号 动态规划,力扣 hot100,leetcode,动态规划,算法

思路

👨‍🏫 参考题解
力扣hot100 最长有效括号 动态规划,力扣 hot100,leetcode,动态规划,算法

Code

⏰ 时间复杂度: O ( n ) O(n) O(n)
🌎 空间复杂度: O ( n ) O(n) O(n)文章来源地址https://www.toymoban.com/news/detail-809157.html

class Solution {
	public int longestValidParentheses(String s)
	{
		int n = s.length();
		int[] f = new int[n];// f[i] 表示以第 i 个字符结尾的最长有效子字符串的长度
		int ans = 0;
		for (int i = 1; i < n; i++)
		{
			if (s.charAt(i) == ')')// 只有右括号结尾才有效
				if (s.charAt(i - 1) == '(')// 上一个是 左括号
				{
					if (i < 2)
						f[i] = 2;
					else
						f[i] = f[i - 2] + 2;
				} else // 上一个也是 右括号
				{
					if (f[i - 1] > 0) //前面已经组成有效括号对序列
					{
						int pre = i - 1 - f[i - 1]; // 此处 s[pre] 与 s[i] 是相配对的位置
						if (pre >= 0 && s.charAt(pre) == '(')// 存在且配对成功
						{
							f[i] = f[i - 1] + 2;// 在前边的 f[i-1] 上再加上一对
							if (pre - 1 > 0)//看看 pre 前边是否还有已经配对好的序列
								f[i] += f[pre - 1];
						}
					}
				}
			ans = Math.max(ans, f[i]);//更新答案
		}
		return ans;
	}
}

到了这里,关于力扣hot100 最长有效括号 动态规划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 有效的括号字符串(力扣)动态规划、贪心 JAVA

    给你一个只包含三种字符的字符串,支持的字符类型分别是 ‘(’、‘)’ 和 ‘*’。请你检验这个字符串是否为有效字符串,如果是有效字符串返回true 。 有效字符串符合如下规则: 任何左括号 ‘(’ 必须有相应的右括号 ‘)’。 任何右括号 ‘)’ 必须有相应的左括号 ‘(’

    2024年02月14日
    浏览(40)
  • 力扣hot100:416.分割等和子集(组合/动态规划/STL问题)

    组合数问题 我们思考一下,如果要把数组分割成两个子集,并且两个子集的元素和相等,是否等价于在数组中寻找若干个数使之和等于所有数的一半?是的! 因此我们可以想到,两种方式: ①回溯的方式找到target,但是回溯是阶乘级别的算法,这里会超时。 ②从前往后遍历

    2024年04月28日
    浏览(37)
  • Leetcode | 有效的括号、最长有效括号

    给定一个只包括  \\\'(\\\' , \\\')\\\' , \\\'{\\\' , \\\'}\\\' , \\\'[\\\' , \\\']\\\'  的字符串  s  ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 示例 2: 示例 3: 提示: 1

    2024年02月14日
    浏览(43)
  • 力扣hot100 最长递增子序列 线性DP 贪心 二分

    Problem: 300. 最长递增子序列 时间复杂度: O ( n 2 ) O(n^2) O ( n 2 ) 空间复杂度: O ( n ) O(n) O ( n ) 👨‍🏫 参考题解 时间复杂度: O ( n log ⁡ n ) O(nlog{n}) O ( n lo g n ) 空间复杂度: O ( n ) O(n) O ( n )

    2024年01月20日
    浏览(41)
  • [力扣 Hot100]Day8 无重复字符的最长子串

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 出处 使用双指针构成一个滑动窗口,维护窗口内的字符不重复,逐步右移右指针,当右指针所指元素已经在窗口内时,左指针右移到和右指针所指元素重复的位置的右侧。 每次右移右指针会使窗口增大

    2024年01月22日
    浏览(43)
  • 【算法题】动态规划中级阶段之最长回文子串、括号生成、跳跃游戏

    动态规划(Dynamic Programming,简称 DP)是一种解决多阶段决策过程最优化问题的方法。它是一种将复杂问题分解成重叠子问题的策略,通过维护每个子问题的最优解来推导出问题的最优解。 动态规划的主要思想是利用已求解的子问题的最优解来推导出更大问题的最优解,从而

    2024年02月12日
    浏览(45)
  • 力扣--动态规划300.最长递增子序列

    一开始想到的方法非常低效,但好理解。   思路分析: 使用二维数组 dp 来记录递增子序列的长度信息,其中 dp[i][0] 表示以 nums[i] 结尾的最长递增子序列的长度, dp[i][1] 表示包含 nums[i] 的最长递增子序列的长度。 初始化 dp 数组,将以第一个元素结尾的递增子序列长度置为

    2024年01月24日
    浏览(50)
  • 【算法】力扣【动态规划,LCS】1143. 最长公共子序列

    1143. 最长公共子序列 本文是对 LCS 这一 动态规划 模型的整理,以力扣平台上的算法题1143:最长公共子序列为模板题进行解析。 该题目要求计算两个字符串的最长公共子序列(Longest Common Subsequence,简称LCS)的长度。字符串的子序列是指在不改变字符顺序的情况下,通过删去

    2024年01月17日
    浏览(61)
  • 力扣300:最长递增子序列(Java动态规划+双指针)

    给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。   示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序

    2024年02月12日
    浏览(51)
  • 1027. 最长等差数列【leetcode】/动态规划

    给你一个整数数组 nums,返回 nums 中最长等差子序列的长度。 回想一下,nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] ,且 0 = i1 i2 … ik = nums.length - 1。并且如果 seq[i+1] - seq[i]( 0 = i seq.length - 1) 的值都相同,那么序列 seq 是等差的。 示例 1 : 输入 :nums = [3,6,9,12] 输出 :

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包