ds-algo-study
Version:
Just experimenting with publishing a package
44 lines (34 loc) • 1.11 kB
JavaScript
/*
LeetCode -> 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.
*/
const longestValidParentheses = ( s ) => {
const n = s.length
const stack = []
// storing results
const res = new Array( n ).fill( -Infinity )
for ( let i = 0; i < n; i++ ) {
const bracket = s[ i ]
if ( bracket === ')' && s[ stack[ stack.length - 1 ] ] === '(' ) {
res[ i ] = 1
res[ stack[ stack.length - 1 ] ] = 1
stack.pop()
} else {
stack.push( i )
}
}
// summing all adjacent valid
for ( let i = 1; i < n; i++ ) {
res[ i ] = Math.max( res[ i ], res[ i ] + res[ i - 1 ] )
}
// adding 0 if there are none so it will return 0 instead of -Infinity
res.push( 0 )
return Math.max( ...res )
}
const main = () => {
console.log( longestValidParentheses( ')()())' ) ) // output -> 4
console.log( longestValidParentheses( '' ) ) // output -> 0
console.log( longestValidParentheses( '(()' ) ) // output -> 2
}
main()