zoukankan      html  css  js  c++  java
  • 【leetcode】32. Longest Valid Parentheses

    题目如下:

    解题思路:从头开始遍历string,用left和right分别表示左括号和右括号的数量,并用index记录起始下标。如果遇到left = right,表示这一段区间是合法的括号子串;如果right > left,表明这一段区间是不合法的,需要从index开始依次右移缩短区间,直到left = right为止;如果left > right的话,继续遍历。遍历完成后,求出最长的一段合法区间即可。但是这种方法对于输入string = "(()"是不适用的,因为直到遍历完成,也没有出现left = right的区间。那怎么解决这个问题呢,合法的括号区间是具有对称性的,那么只要再计算一遍string的镜像的最长合法区间,再和原string的最长合法区间求较大值,即为最终结果。

    代码如下:

    class Solution(object):
        def getLongest(self,s):
            left = 0
            right = 0
            startInx = 0
            res = 0
            for i in xrange(len(s)):
                if s[i] == '(':
                    left += 1
                else:
                    right += 1
                while left < right:
                    if s[startInx] == '(':
                        left -= 1
                    else:
                        right -= 1
                    startInx += 1
                if left == right:
                    res = max(res, i - startInx + 1)
            return res
        def longestValidParentheses(self, s):
            """
            :type s: str
            :rtype: int
            """
            res = self.getLongest(s)
            rs = ''
            #求s的镜像
            for i in s[::-1]:
                if i == '(':
                    rs += ')'
                else:
                    rs += '('
            res = max(res,self.getLongest(rs))
            return res
  • 相关阅读:
    第 4 章 配置
    Jdbc连接数据库大全
    第 3 章 体系结构(Architecture)
    嵌入式开发工具介绍与下载
    Hibernate3的DetachedCriteria支持
    引用 DetachedCriteria
    第 5 章 持久化类(Persistent Classes)
    超市营销的方向和重点
    超越对手——项目经理应有的工作态度
    WBS应该多细致?
  • 原文地址:https://www.cnblogs.com/seyjs/p/9342037.html
Copyright © 2011-2022 走看看