首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python 最长有效括号 多种解法

python 最长有效括号 多种解法

作者头像
编程小白狼
发布于 2024-12-31 08:18:36
发布于 2024-12-31 08:18:36
4440
举报
文章被收录于专栏:编程小白狼编程小白狼
  1. 使用栈: 遍历字符串,当遇到左括号时,将其下标压入栈中;当遇到右括号时,如果栈为空,则将当前右括号下标作为新的起始点,否则将栈顶元素出栈,并计算当前有效括号的长度。 Python代码示例:
代码语言:javascript
复制
def longest_valid_parentheses(s):
    stack = [-1]  # 栈中始终保持一个起始位置
    max_length = 0
    for i in range(len(s)):
        if s[i] == '(':
            stack.append(i)
        else:
            stack.pop()
            if len(stack) == 0:
                stack.append(i)
            else:
                max_length = max(max_length, i - stack[-1])
    return max_length
  1. 使用动态规划: 定义一个动态规划数组 dp,其中 dp[i] 表示以索引 i 结尾的最长有效括号的长度。对于每个右括号,需要考虑其前面的字符是否是左括号,如果是,则可以与该左括号匹配,此时的最长有效括号长度为 dp[i-2] 加上 2;还需要考虑右括号前面的字符是否是右括号,如果是,则需要找到与当前右括号匹配的左括号的前一个位置 j,此时的最长有效括号长度为 dp[i-1] 加上 2 再加上 dp[j-1]。 Python代码示例:
代码语言:javascript
复制
def longest_valid_parentheses(s):
    n = len(s)
    dp = [0] * n
    max_length = 0
    for i in range(1, n):
        if s[i] == ')':
            if s[i - 1] == '(':
                dp[i] = dp[i - 2] + 2 if i >= 2 else 2
            elif i - dp[i - 1] > 0 and s[i - dp[i - 1] - 1] == '(':
                dp[i] = dp[i - 1] + (dp[i - dp[i - 1] - 2] if i - dp[i - 1] >= 2 else 0) + 2
            max_length = max(max_length, dp[i])
    return max_length
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档