力扣刷题Python笔记:最长有效括号

题目

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
力扣刷题Python笔记:最长有效括号_第1张图片
来源:力扣(LeetCode)

python解法

中午不睡,下午崩溃~

栈解法

已经做过了几个括号有关的题,于是这次自然而然地想到了要用栈,但是却想不出来该怎么用栈,又是看题解的一天~

解题思路如下:
①设置栈stack用来存放 “(” 字符的索引位置,初始栈中有个元素-1;
②遍历字符串 s ,当字符为 “(” 时,将对应的索引存入栈stack中;
③当字符为 “)” 时,去除栈stack的最后一个元素,判断当前栈是否为空:为空说明右括号太多了,当前的有效括号长度为0,并将当前索引压入栈中;不为空说明当前括号长度仍然有效并更新最大有效括号长度。

代码来自力扣题解,具体如下:

def longestValidParentheses(self, s: str) -> int:
    if not s:
        return 0
    res = 0
    stack = [-1]
    for i in range(len(s)):
        if s[i] == "(":
            stack.append(i)
        else:
            stack.pop()
            if not stack:
                stack.append(i)
            else:
                res = max(res,i - stack[-1])
    return res

你可能感兴趣的:(力扣python刷题,算法)