给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”
思路: 原本这是一道应该用动态规划解的,但是出现了一种神奇的解法,特此记录一下。
class Solution {
public int longestValidParentheses(String s) {
int l = 0;
int r = 0;
int ans = 0;
for (int i = 0;i < s.length();i++) {
if (s.charAt(i) == '(') {
l++;
} else {
r++;
}
if (l == r) {
ans = Math.max(ans,l*2);
} else if (l <= r) {
l = r = 0;
}
}
l = r = 0;
// 右到左
for (int j = s.length()-1;j >= 0;j--) {
if (s.charAt(j) == '(') {
l++;
} else {
r++;
}
if (l == r) {
ans = Math.max(ans,l*2);
} else if (r <= l){
l = r = 0;
}
}
return ans;
}
}