32最长有效括号

给定一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:

输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"

示例 2:

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Solution 1

执行用时:56 ms
内存消耗:13.8 MB

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        """
        思路:有效括号价于下面3个条件:
            从左往右看,每个地方左括号数量大于等于右括号
            从右往左看,每个地方右括号数量大于等于左括号
            左右括号数量相等
        """
        left = 0
        right = 0
        maxLen = 0
        for i in range(len(s)):
            if s[i] == '(':
                left += 1
            elif s[i] == ')':
                right += 1
            if right > left:
                left = 0
                right = 0
            elif left == right:
                maxLen = max(maxLen, left*2)
        left = 0
        right = 0
        for i in range(-1, -len(s)-1, -1):
            if s[i] == '(':
                left += 1
            elif s[i] == ')':
                right += 1
            if left > right:
                left = 0
                right = 0
            elif left == right:
                maxLen = max(maxLen, left*2)
        return maxLen