LeetCode Top 100 Liked Questions 32.Longest Valid Parentheses(Java版; Hard)
题目描述
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.
Example 1:
Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"
Example 2:
Input: ")()())"
Output: 4
Explanation: The longest valid parentheses substring is "()()"
classSolution{publicintlongestValidParentheses(String s){int n = s.length();if(n<2){return0;}//dp[i]表示以s[i]结尾时的有效括号长度//dp[i] = dp[i-2] + 2 if s[i-1]=='('//dp[i] = dp[i-dp[i-1]-2] + dp[i-1] + 2 if s[i-1]==')' && s[i-dp[i-1]-1] == '('int[] dp =newint[n];int max =0;char[] chs = s.toCharArray();for(int i=0; i<n; i++){if(chs[i]==')'){if(i-1>=0&& chs[i-1]=='('){
dp[i]=2+(i-2>=0?dp[i-2]:0);}elseif(i-1>=0&& i-dp[i-1]-1>=0&& chs[i-1]==')'&&chs[i-dp[i-1]-1]=='('){
dp[i]= dp[i-1]+2+(i-dp[i-1]-2>=0?dp[i-dp[i-1]-2]:0);}}
max = Math.max(max, dp[i]);}return max;}}
publicclassSolution{publicintlongestValidParentheses(String s){int left =0, right =0, maxlength =0;for(int i =0; i < s.length(); i++){if(s.charAt(i)=='('){
left++;}else{
right++;}if(left == right){
maxlength = Math.max(maxlength,2* right);}elseif(right >= left){
left = right =0;}}
left = right =0;for(int i = s.length()-1; i >=0; i--){if(s.charAt(i)=='('){
left++;}else{
right++;}if(left == right){
maxlength = Math.max(maxlength,2* left);}elseif(left >= right){
left = right =0;}}return maxlength;}}
LeetCode Top 100 Liked Questions 32.Longest Valid Parentheses(Java版; Hard)
welcome to my blogLeetCode Top 100 Liked Questions 32.Longest Valid Parentheses(Java版; Hard)题目描述Given a string containing just the characters '(' and ')', find the length of the longest valid (well...