Leetcode 32 Longest Valid Parentheses
阿新 • • 發佈:2018-12-23
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"()()"
這個題的意思是求出字串中存在的括號對並進行返回。
1)
class Solution { public int longestValidParentheses(String s) { int max = 0; Stack<Integer> stack = new Stack<>(); stack.push(-1);//設立初值 for(int i = 0 ; i < s.length(); ++i){ if(s.charAt(i) == '('){ stack.push(i); }else{ stack.pop();//如果匹配的話直接彈出 if(stack.isEmpty()){ stack.push(i);//如果為空了,情況為一直出現左括號沒有有括號提前壓棧 }else{ max = Math.max(max,i - stack.peek());//計算最大量 } } } return max; } }
2)
public class Solution { public int longestValidParentheses(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); } else if (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); } else if (left >= right) { left = right = 0; } } return maxlength; } }
從左到右和從右向左進行掃。