leetcode:Longest Valid Parentheses 使用动态规划O(n)思路

来源:互联网 发布:maya软件配置要求 编辑:程序博客网 时间:2024/06/04 19:09

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.

题目分析:要找到最长的括号匹配,首先第一个要考虑的是匹配的括号能否连起来。我们考虑到后面的括号会影响前面的匹配结果,所以想到用从后往前的动态规划。

具体分析如下:如果遇到'(',我们需要跳过后面已经匹配的括号,找到真正要匹配的位置j,如果匹配,则de[i]=dp[i+1]+2;并且如果j+1<len,则之前的和之后的连起来了dp[i]+=dp[j+1];

具体代码如下:

/*使用动态规划的思想,从后往前一步步规划来进行排序 * 遇到左括号,则需要跳过对应的已经匹配的寻找是否匹配 * 如果匹配的话还可以加上匹配)之前匹配的值 * */ public int longestValidParentheses(String s) {int len=s.length();if(len<=1) return 0;int[] dp=new int[len];int max=0;for(int i=len-2;i>=0;i--){char c=s.charAt(i);if(c=='('){int j=i+1+dp[i+1];if(j<len&&s.charAt(j)==')'){dp[i]=dp[i+1]+2;if(j+1<len)dp[i]+=dp[j+1];}}if(dp[i]>max)max=dp[i];}return max; }


0 0
原创粉丝点击