• Leetcode——32.最长有效括号【##】



    @author: ZZQ
    @software: PyCharm
    @file: leetcode32_最长有效括号.py
    @time: 2018/11/22 19:19

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

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

    思路:

         1)max_len 用于记录当前匹配最长的括号长度。
         2)s_dict用来存储遇到的左括号的下标。
         3)start存储有效的起始下标。
         4)遇到左括号,下标入栈
         5)遇到右括号,a.如果此时s_dict为空,则更新start的值
                     b. 否则,s_dict栈顶元出栈,此时,
                            b.1.如果是栈为空,记录当前匹配到的子串长度【i到start之间的距离,包含start】i-start+1,更新max_len的值;
                            b.2.如果栈非空,后面可能还会继续匹配,先记录当前匹配到的子串长度【i到栈顶元素下标之间的距离】i-s_dict[-1],更新max_Len的值。
    

    AC代码如下:

    class Solution():
        def __init__(self):
            pass
    
        def longestValidParentheses(self, s):
            """
            :type s: str
            :rtype: int
            """
            s_len = len(s)
            max_len = 0
            s_dict = []
            i = 0
            start = 0
            while i < s_len:
                if s[i] == '(':
                    s_dict.append(i)
                else:
                    if len(s_dict) == 0:
                        i += 1
                        start = i
                        continue
                    else:
                        s_dict.pop()
                        if len(s_dict) == 0:
                            max_len = max(max_len, i-start+1)
                        else:
                            max_len = max(max_len, i-s_dict[-1])
                i += 1
            return max_len
    
    
    if __name__ == "__main__":
        answer = Solution()
        print(answer.longestValidParentheses("(())((()"))
    
  • 相关阅读:
    再谈:我对测试行业发展和自我价值诉求的思考
    如何写出让业务满意的性能测试报告
    面试突击17:HashMap除了死循环还有什么问题?
    Spring Boot Admin,贼好使!
    为什么HashMap会产生死循环?
    更快的Maven构建工具mvnd和Gradle哪个更快?
    交互软件Flinto Principle
    如何避免 加和浮点数的问题
    Oracle Linux 8.5 For windows
    三门问题
  • 原文地址:https://www.cnblogs.com/zzq-123456/p/10007426.html
Copyright © 2020-2023  润新知