【LeetCode】 32. Longest Valid Parentheses 最长有效括号(Hard)(JAVA)
题目地址: https://leetcode.com/problems/longest-valid-parentheses/
题目描述:
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 "()()"
题目大意
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
解题方法
- 从左往右遍历,找出最长的有效括号
a). 如果左括号 - 右括号 < 0,重新开始计数
b). 左括号 - 右括号 == 0,当前个数与 max 比较 - 从右往左遍历,找出最长的有效括号
class Solution {
public int longestValidParentheses(String s) {
int max = 0;
int cur = 0;
int lefts = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
lefts++;
} else {
lefts--;
}
cur++;
if (lefts == 0) {
if (cur > max) max = cur;
} else if (lefts < 0) {
lefts = 0;
cur = 0;
}
}
lefts = 0;
cur = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == '(') {
lefts++;
} else {
lefts--;
}
cur++;
if (lefts == 0) {
if (cur > max) max = cur;
} else if (lefts > 0) {
lefts = 0;
cur = 0;
}
}
return max;
}
}
执行用时 : 2 ms, 在所有 Java 提交中击败了 97.15% 的用户
内存消耗 : 37.8 MB, 在所有 Java 提交中击败了 24.99% 的用户