最长有效括号
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”
动态规划
动态规划思想:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
当前为左括号
需用到辅助数组d[s.length()],表示从当前字符开始,到字符串结尾的最长有效括号子串长度(当前字符需为有效括号子串的第一个字符)
解题思路:从字符串结尾往前处理,求辅助数组d[]
当前字符下标为index,若当前字符为左括号’(’,判断index+1+d[index+1]位置的字符是否为右括号’)’,若为右括号,则d[index] = d[index+1]+2,并且判断index+1+d[index+1]+1位置的元素是否存在,若存在,则d[index] += d[index+1+d[index+1]+1](解决上述两个有效括号子串直接相邻的情况)
/*
* @Author liuhaidong
* @Description 当前为左括号
* @Date 17:05 2019/9/17 0017
**/
public int longestValidParentheses(String s) {
if(null == s) return 0;
int len = s.length(), max = 0;
int[] d = new int[len];
for(int index = len-2; index >= 0; index--){

本文介绍了如何使用动态规划和栈解决LeetCode上的最长有效括号匹配问题。通过动态规划思路,从字符串结尾开始处理,结合栈的数据结构,解析括号串并找到最长的有效括号子串。示例和详细解题过程揭示了如何处理不同情况,包括当前字符为左括号和右括号时的策略。
最低0.47元/天 解锁文章
475

被折叠的 条评论
为什么被折叠?



