当前位置: 面试刷题>> 最长有效括号 (经典算法题500道)


### 题目描述补充 **题目:最长有效括号** 给定一个只包含 `'('` 和 `')'` 的字符串,找出最长的包含有效括号的子串的长度。 有效括号必须满足以下条件: - 左括号 `(` 必须用相同数量的右括号 `)` 包裹起来。 - 每个右括号 `)` 必须有一个对应的左括号 `(`。 **示例 1**: ``` 输入: "(()" 输出: 2 解释: 最长有效括号子串是 "()" ``` **示例 2**: ``` 输入: ")()())" 输出: 4 解释: 最长有效括号子串是 "()()" ``` **示例 3**: ``` 输入: "" 输出: 0 ``` ### PHP 示例代码 ```php function longestValidParentheses($s) { $maxLen = 0; $stack = []; $left = -1; // 记录左括号的位置 for ($i = 0; $i < strlen($s); $i++) { if ($s[$i] == '(') { $stack[] = $i; } else { if (empty($stack)) { $left = $i; // 当栈为空时,更新left为当前位置 } else { array_pop($stack); if (empty($stack)) { // 栈为空,说明从left到i都是有效括号 $maxLen = max($maxLen, $i - $left); } else { // 栈不为空,则计算当前位置到栈顶元素位置的距离 $maxLen = max($maxLen, $i - $stack[count($stack) - 1]); } } } } return $maxLen; } // 示例 echo longestValidParentheses("(()"); // 输出 2 echo longestValidParentheses(")()())"); // 输出 4 echo longestValidParentheses(""); // 输出 0 ``` ### Python 示例代码 ```python def longestValidParentheses(s): max_len = 0 stack = [] for i, char in enumerate(s): if char == '(': stack.append(i) else: if not stack: start = i + 1 else: stack.pop() if not stack: max_len = max(max_len, i - start + 1) else: max_len = max(max_len, i - stack[-1]) return max_len # 示例 print(longestValidParentheses("(()")) # 输出 2 print(longestValidParentheses(")()())")) # 输出 4 print(longestValidParentheses("")) # 输出 0 ``` ### JavaScript 示例代码 ```javascript function longestValidParentheses(s) { let maxLen = 0; const stack = []; let left = -1; for (let i = 0; i < s.length; i++) { if (s[i] === '(') { stack.push(i); } else { if (stack.length === 0) { left = i; } else { stack.pop(); if (stack.length === 0) { maxLen = Math.max(maxLen, i - left); } else { maxLen = Math.max(maxLen, i - stack[stack.length - 1]); } } } } return maxLen; } // 示例 console.log(longestValidParentheses("(()")); // 输出 2 console.log(longestValidParentheses(")()())")); // 输出 4 console.log(longestValidParentheses("")); // 输出 0 // 码小课网站中有更多相关内容分享给大家学习 ``` 以上代码示例展示了如何使用栈来解决“最长有效括号”问题,并给出了 PHP、Python 和 JavaScript 的实现方式。
推荐面试题