题目描述:

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

For "(()", the longest valid parentheses substring is"()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

翻译:

给定一个包含‘(’和‘)’的字符串,找出最长的有效括号匹配子串的长度。

解法:

这道题可以用一维动态规划逆向求解。假设输入括号表达式为String s,维护一个长度为s.length的一维数组dp[],数组元素初始化为0。 dp[i]表示从s[i]到s[s.length - 1]最长的有效匹配括号子串长度。则存在如下关系:

dp[s.length - 1] = 0;

从i - 2 -> 0逆向求dp[],并记录其最大值。若s[i] == '(',则在s中从i开始到s.length - 1计算s[i]的值。这个计算分为两步,通过dp[i + 1]进行的(注意dp[i + 1]已经在上一步求解):

在s中寻找从i + 1开始的有效括号匹配子串长度,即dp[i + 1],跳过这段有效的括号子串,查看下一个字符,其下标为j = i + 1 + dp[i + 1]。若j没有越界,并且s[j] == ‘)’,则s[i ... j]为有效括号匹配,dp[i] =dp[i + 1] + 2。

在求得了s[i ... j]的有效匹配长度之后,若j + 1没有越界,则dp[i]的值还要加上从j + 1开始的最长有效匹配,即dp[j + 1]。

Java Code:

public class Solution {

public int longestValidParentheses(String s) {

// Start typing your Java solution below

// DO NOT write main() function

int n = s.length();

int[] dp = new int[n];

java.util.Arrays.fill(dp, 0);

int max = 0;

for (int i = n - 2; i >= 0; i--) {

if (s.charAt(i) == '(') {

int j = i + 1 + dp[i + 1];

if (j < n && s.charAt(j) == ')') {

dp[i] = dp[i + 1] + 2;

int k = 0;

if (j + 1 < n) {

k = dp[j + 1];

}

dp[i] += k;

}

max = Math.max(max, dp[i]);

}

}

return max;

}

}

最长有效括号子串长度 c语言,LeetCode: Longest Valid Parentheses (求最长有效匹配括号子串的长度)...相关推荐

  1. 32. Longest Valid Parentheses 最长有效括号

    Title 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 " ...

  2. leetCode第五题-求字符串最长回文字符串

    原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...

  3. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  4. python求回文_python实现求最长回文子串长度

    给定一个字符串,求它最长的回文子串长度,例如输入字符串'35534321',它的最长回文子串是'3553',所以返回4. 最容易想到的办法是枚举出所有的子串,然后一一判断是否为回文串,返回最长的回文子 ...

  5. python长度多少_用Python求最长子串长度快速版

    哈喽大家好,周二也是令人愉快的一天啊,今天天气不错,坐在窗户旁边边晒太阳边写文章,再泡杯热茶,真是舒服美好,废话不多说,今天说一下Python求最长子串长度,希望对大家有作用,raksmart服务器. ...

  6. 统计5个字符串回文个数c语言,第一章 字符串 – 1.5 最长回文子串 - 编程之法:面试和算法心得...

    最长回文子串 题目描述 给定一个字符串,求它的最长回文子串的长度. 分析与解法 最容易想到的办法是枚举所有的子串,分别判断其是否为回文.这个思路初看起来是正确的,但却做了很多无用功,如果一个长的子串包 ...

  7. [Leetcode][第32题][JAVA][最长有效括号][动态规划][栈][正向逆向结合]

    [问题描述][困难] 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度.示例 1:输入: "(()" 输出: 2 解释: 最长有效括号子串为 &qu ...

  8. 第32题 最长匹配括号

    题目: 找出字符串中最长匹配括号的长度,如")()())()()(",结果为4 思路: )  (  ) (  )  ) (  ) (  )  ( 0 1 2 3 4 5 6 7 8 ...

  9. python【力扣LeetCode算法题库】5- 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

最新文章

  1. ActiveMQ的多节点集群
  2. Ansible批量添加远程登录用户
  3. Java设计模式(七)策略模式 模板模式
  4. HPU-- 1190 確率
  5. java请实现程序输出以下星塔||输出菱形
  6. 第二届大数据科学与工程国际会议在贵阳成功召开
  7. 数学与算法《TF-IDF》
  8. 精灵图的使用(HTML、CSS)
  9. python真的是吹过了-被吹的神乎其神的Python到底都能干什么
  10. 上大计算机专业,高校“计算机”专业排行榜,东大完成逆袭,上交大不敌哈工大...
  11. matlab word 查找 词组,matlab搜索word文档
  12. JPYXGSIT故障解决方案
  13. abp框架 mysql_ABP框架使用Mysql数据库
  14. win7(32位)旗舰版共享HP1010打印机给WINXP专业版
  15. 在线直播系统搭建的功能包含哪些?
  16. iphone6s html5没声音,iphone6S来电没声音怎么回事?解决iphone来电没声音的方法
  17. android 雷达图 蜘蛛图
  18. 狙击英雄-张桃芳于2007年10月29日在潍坊逝世
  19. java工程师的工作述职报告,java程序员述职报告
  20. Jmeter 入门 从0-1 基础篇-实操

热门文章

  1. logging、hashlib、collections模块
  2. js实现冒泡排序,快速排序,选择排序
  3. CNN实操记录(goal:一日一更新)
  4. jquery+ajax+ashx
  5. 我们为什么活得这么累
  6. 程序员如何保持身心健康,做到这几点,远离秃头。
  7. 飞书×帆软数知鸟 | 飞书上的一站式需求管理
  8. 版权归原作者的飞鸽传书(IPMSG)
  9. 浅谈种子搜索算法及C++实现方法
  10. FreeEIM通讯软件平均需要5分钟才能