最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
/**
* @param {string} s
* @return {number}
*/
const longestValidParentheses = (s) => {
const len = s.length
if (len <= 1) return 0
const stack = [-1]
let max = 0
for (let i = 0; i < len; i++) {
const v = s[i]
if (v === '(') {
stack.push(i)
} else {
stack.pop()
if (stack.length > 0) {
max = Math.max(max, i - stack[stack.length - 1])
} else {
stack.push(i)
}
}
}
return max
};
两次循环
const longestValidParentheses = (s) => {
let max = 0
let left = 0
let right = 0
const len = s.length
for (let i = 0; i < len; i++) { //从左往右
if (s[i] === "(") { //遇见'(' left++
left++
} else {
right++ //遇见')' right++
}
if (left === right) { //左右数量相同
max = Math.max(max, 2 * left); //更新最大长度
} else if (right > left) { //right大于left 重置left right 重新计数
left = right = 0
}
}
left = right = 0
for (let i = len - 1; i > -1; i--) { //从右往左
if (s[i] === "(") {
left++
} else {
right++
}
if (left === right) {
max = Math.max(max, right * 2);
} else if (left > right) {
left = right = 0
}
}
return max
};
以自己现在的努力程度,还没有资格和别人拼天赋

浙公网安备 33010602011771号