当前位置: 面试刷题>> 最长有效括号 (经典算法题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 的实现方式。