一、题目
二、实现
思路:
复杂度分析:
时间复杂度: O(n),n 是给定字符串的长度。我们只需要遍历字符串一次即可。
空间复杂度: O(n)。栈的大小在最坏情况下会达到 n,因此空间复杂度为 O(n) 。
/**
*
* @param s string字符串
* @return int整型
*/
function longestValidParentheses( s ) {
let maxlen = 0;
let arr = [-1]; //最后一个没有匹配的右括号下标
for(var i=0;s[i]==")";i++); //1.先排除右括号
for(;i<s.length;i++){ //2.遍历剩余括号
if(s[i]=="("){ //3.遇左括号,将下标入栈
arr.push(i)
}else{//4.遇右括号,出栈
arr.pop();
if(arr.length){
maxlen = Math.max(maxlen, i-arr[arr.length-1]);
}else{ //没有与其匹配的左括号,将其下标作为没有匹配的右括号入栈
arr.push(i)
}
}
}
return maxlen
}
module.exports = {
longestValidParentheses : longestValidParentheses
};