本文共 1214 字,大约阅读时间需要 4 分钟。
要解决这个问题,我们需要找出一个只包含括号'()'的字符串中最长的有效括号子串的长度。动态规划是一种有效的方法来解决这个问题,因为它可以帮助我们逐步构建和记录有效括号子串的长度。
我们可以通过动态规划来解决这个问题。具体步骤如下:
dp,其中dp[i]记录到当前位置为止的最长有效括号子串的长度。dp值为0。dp[i-1],如果dp[i-1]为0,说明前一个字符没有匹配的'(',跳过。j = i - dp[i-1] - 1,跳过到该索引位置的后面部分。s[j] == '(',说明当前字符和前一个匹配字符形成一个完整的括号对。dp[i]为dp[i-1] + 2。如果存在前面有效括号子串的前一个位置的dp值不为零,说明有连续的有效括号,继续加上对应的值。dp[i]后,检查当前的最大值max,并记录最大的有效括号子串的长度。public int longestValidParentheses(String s) { int len = s.length(); int max = 0; int[] dp = new int[len]; for (int i = 1; i < len; i++) { if (s.charAt(i) != '(') { int j = i - dp[i-1] - 1; if (j >= 0 && s.charAt(j) == '(' && dp[j] > 0) { dp[i] = dp[i-1] + 2; if (j > 0 && dp[j - dp[j]] != 0) { dp[i] += dp[j - dp[j]]; } max = Math.max(max, dp[i]); } } } return max;} dp和最大有效括号子串长度max。dp[i]值,同时处理连续有效括号的情况。这种方法通过动态规划记录了每个位置的有效括号长度,确保了在一个单独的遍历中可以高效地解决这个问题。
转载地址:http://olgyk.baihongyu.com/