首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:最长有效括号

#yyds干货盘点# LeetCode程序员面试金典:最长有效括号

时间:2023-04-21 23:33:31浏览次数:41  
标签:yyds charAt 示例 int 金典 maxans 括号 LeetCode dp

题目:

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

 

示例 1:

输入:s = "(()"

输出:2

解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"

输出:4

解释:最长有效括号子串是 "()()"

示例 3:

输入:s = ""

输出:0

代码实现:

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

标签:yyds,charAt,示例,int,金典,maxans,括号,LeetCode,dp
From: https://blog.51cto.com/u_13321676/6214285

相关文章

  • #yyds干货盘点# LeetCode面试题:删除排序链表中的重复元素
    1.简述:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]2.代码实现:classSolution{publicListNodedeleteDuplicates(ListNodehead){......
  • 程序员面试金典---12
    递归乘法直接上代码:/***@param{number}A*@param{number}B*@return{number}*/varmultiply=function(A,B){if(A===0||B===0)return0arr=[0]for(leti=1;i<=B;i++){arr[i]=arr[i-1]+A}returnarr[B......
  • 【LeetCode动态规划#11】打家劫舍系列题(涉及环结构和树形DP的讨论)
    打家劫舍力扣题目链接(opensnewwindow)你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组......
  • 【总结】浅刷leetcode,对于位运算提高性能的一些总结
    目录什么是位运算?位运算技巧1.判断奇偶性2.交换两个数3.判断一个数是否是2的幂次方4.取绝对值5.计算平均数结论位运算技巧是计算机科学中非常重要的一部分,它可以用来解决很多实际问题。在本篇博客中,我们将介绍一些常见的位运算技巧,以及它们在实际应用中的使用。什......
  • leetcode_打卡10
    leetcode_打卡10题目:283.移动零思路:双指针,数值互相交换,不是复制覆盖代码:classSolution{publicvoidmoveZeroes(int[]nums){intn=nums.length;intl=0,r=0;while(r<n){if(nums[r]!=0){swap(nums,l,r);......
  • leetcode_打卡09
    leetcode_打卡09题目:443.压缩字符串思路:双指针代码:classSolution{publicintcompress(char[]chars){intn=chars.length;intwrite=0,left=0;for(intread=0;read<n;read++){if(read==n-1||chars[r......
  • 【DP】LeetCode 312. 戳气球
    题目链接312.戳气球思路参考动态规划套路解决戳气球问题分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数组的动态规划问题中,一般dp[i]都是表示以nums[i]为结尾的状态;dp[i][j]分别表示以nums1[i]和nums......
  • leetcode-876链表的中间节点
    找链表的中间节点思路心得当不知道while的终止条件时,可以先写while(true),然后在循环体中写终止条件,这样写的好处是可以暂时不考虑终止条件,使思路更清晰;坏处是这样有时候会使循环体的内容很混乱要注意分类!本题中把情况分为节点个数是奇数和偶数去分析,最终找到统一的......
  • leetcode-234回文链表
    回文链表方法一:借助数组进行判断把节点的值复制到一个数组中再利用数组进行判断,但是这样需要占用额外的空间/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*......
  • 程序员面试金典---11
    魔术索引思路:直接代码functionfindMagicIndex(nums){leti=0if(!nums.length){return-1}else{while(i<=nums.length&&i!==nums[i]){i++}letmin=i>nums.length?-1:i......