暴力破解法试了半天,没破解出来,估计破解出来也会超时。这一题真的难
方法一:使用动态规划来解决,具体怎么解决还是看leetcode官方视频吧。
var longestValidParentheses = function(s) {
let arr = new Array(s.length).fill(0);
let max = 0;
for(let i=0;i<s.length;i++){
//为右括号,判断前一个值是否存在,如果存在判断数值
if(s[i]===")"){
if(i!==0&&s[i-arr[i-1]-1]==="("){
arr[i] = arr[i-1] + 2;
if(i-arr[i-1]-2>=0)arr[i]+=arr[i-arr[i-1]-2];
max = Math.max(max,arr[i]);
}
}
}
return max;
};
方法二:栈
var longestValidParentheses = function(s) {
let stack = [-1];
let length = 0;
let max = 0;
for(let i=0;i<s.length;i++){
if(s[i]==="("){
stack.push(i);
}else{
stack.pop();
if(stack.length===0){
stack.push(i);
}else{
length = i-stack[stack.length-1];
max = Math.max(length,max);
}
}
}
return max;
};