32. 最长有效括号
Posted 潜行前行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32. 最长有效括号相关的知识,希望对你有一定的参考价值。
- 最长有效括号
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
示例 2:
输入:s = “)()())”
输出:4
解释:最长有效括号子串是 “()()”
示例 3:
输入:s = “”
输出:0
动态规划
class Solution {
public int longestValidParentheses(String s) {
char[] data = s.toCharArray();
int[] dp = new int[s.length()];
int max = 0;
for(int i=1;i<data.length;i++ ){
if(data[i] == ')'){
if(data[i-1] == '('){
dp[i] = (i < 2 ? 0 : dp[i-2]) + 2;
}else if( (i - dp[i-1]) > 0 && data[i - dp[i-1] -1] =='('){
dp[i] = dp[i-1] + 2 + ( (i - dp[i-1] -2) < 0 ? 0 : dp[i - dp[i-1] -2]);
}
max = Math.max(dp[i],max);
}
}
return max;
}
}
栈
class Solution {
public int longestValidParentheses(String s) {
int max = 0;
Stack<Integer> stack = new Stack<Integer>();
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;
}
}
以上是关于32. 最长有效括号的主要内容,如果未能解决你的问题,请参考以下文章