最长有效括号子串长度 c语言,LeetCode: Longest Valid Parentheses (求最长有效匹配括号子串的长度)...
题目描述:
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 (求最长有效匹配括号子串的长度)...相关推荐
- 32. Longest Valid Parentheses 最长有效括号
Title 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 " ...
- leetCode第五题-求字符串最长回文字符串
原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...
- Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离
Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...
- python求回文_python实现求最长回文子串长度
给定一个字符串,求它最长的回文子串长度,例如输入字符串'35534321',它的最长回文子串是'3553',所以返回4. 最容易想到的办法是枚举出所有的子串,然后一一判断是否为回文串,返回最长的回文子 ...
- python长度多少_用Python求最长子串长度快速版
哈喽大家好,周二也是令人愉快的一天啊,今天天气不错,坐在窗户旁边边晒太阳边写文章,再泡杯热茶,真是舒服美好,废话不多说,今天说一下Python求最长子串长度,希望对大家有作用,raksmart服务器. ...
- 统计5个字符串回文个数c语言,第一章 字符串 – 1.5 最长回文子串 - 编程之法:面试和算法心得...
最长回文子串 题目描述 给定一个字符串,求它的最长回文子串的长度. 分析与解法 最容易想到的办法是枚举所有的子串,分别判断其是否为回文.这个思路初看起来是正确的,但却做了很多无用功,如果一个长的子串包 ...
- [Leetcode][第32题][JAVA][最长有效括号][动态规划][栈][正向逆向结合]
[问题描述][困难] 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度.示例 1:输入: "(()" 输出: 2 解释: 最长有效括号子串为 &qu ...
- 第32题 最长匹配括号
题目: 找出字符串中最长匹配括号的长度,如")()())()()(",结果为4 思路: ) ( ) ( ) ) ( ) ( ) ( 0 1 2 3 4 5 6 7 8 ...
- python【力扣LeetCode算法题库】5- 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
最新文章
- ActiveMQ的多节点集群
- Ansible批量添加远程登录用户
- Java设计模式(七)策略模式 模板模式
- HPU-- 1190 確率
- java请实现程序输出以下星塔||输出菱形
- 第二届大数据科学与工程国际会议在贵阳成功召开
- 数学与算法《TF-IDF》
- 精灵图的使用(HTML、CSS)
- python真的是吹过了-被吹的神乎其神的Python到底都能干什么
- 上大计算机专业,高校“计算机”专业排行榜,东大完成逆袭,上交大不敌哈工大...
- matlab word 查找 词组,matlab搜索word文档
- JPYXGSIT故障解决方案
- abp框架 mysql_ABP框架使用Mysql数据库
- win7(32位)旗舰版共享HP1010打印机给WINXP专业版
- 在线直播系统搭建的功能包含哪些?
- iphone6s html5没声音,iphone6S来电没声音怎么回事?解决iphone来电没声音的方法
- android 雷达图 蜘蛛图
- 狙击英雄-张桃芳于2007年10月29日在潍坊逝世
- java工程师的工作述职报告,java程序员述职报告
- Jmeter 入门 从0-1 基础篇-实操