輔助 不符合條件時要中斷 遇到“(”把當前遍歷i下標入棧 遇到“)”出棧 空時證明子串中斷 非空 計算深度 i - stack.peek()
時間復雜度:O(N) 空間復雜度:O(N)
publicclassSolution{publicintlongestValidParentheses(String s){int maxans =0;Stack<Integer> stack =newStack<>();stack.push(-1);for(int i =0; i < s.length(); i++){if(s.charAt(i)=='('){stack.push(i);}else{stack.pop();if(stack.empty()){stack.push(i);}else{maxans = Math.max(maxans, i - stack.peek());}}}return maxans;}}
3. 正向逆向結合
時間復雜度:O(N) 空間復雜度:O(1)
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;}}