// TypeScript
function longestValidParentheses(s: string): number {
const n = s.length;
if (n === 0) {
return 0;
}
const stack = [-1];
const top = (arr: number[]): number => {
const len = arr.length;
if (len !== 0) {
return arr[len-1];
}
else {
throw new Error('Stack is empty!');
}
};
let ans = 0;
for (let i = 0; i < n; i++) {
if (s[i] === '(') {
stack.push(i);
}
else {
stack.pop();
if (stack.length === 0) {
stack.push(i);
}
else {
ans = Math.max(ans, i - top(stack));
}
}
}
return ans;
};