zoukankan      html  css  js  c++  java
  • 32. 最长有效括号

    我的代码居然过了。。

    class Solution:
        def expand(l,s):
            r = False
            for item in l:
                left = item[0]
                right = item[1]
                if left>=1 and s[left-1]=='(' and right+1<len(s) and s[right+1]==')':
                    item[0] -= 1
                    item[1] += 1
                    r = True
            return r
        def merge(l):
            if len(l)<=1:
                return l
            for i in range(1,len(l)):
                if l[i][0]-l[i-1][1]==1:
                    l[i][0] = -1
                    l[i-1][1] = -1
            nl = []
            for item in l:
                nl.extend(item)
            nl = [i for i in nl if i!=-1]
            l = [nl[i:i+2] for i in range(0,len(nl),2)]
            return l
    
        def longestValidParentheses(self, s: str) -> int:
            if len(s)==1:
                return 0
            l = []
            for i in range(1,len(s)):
                if s[i-1]=='(' and s[i]==')':
                    l.append([i-1,i])
            if len(l)==0:
                return 0
            while True:
                l = Solution.merge(l)
                #print('merge',l)
                r = Solution.expand(l,s)
                #print('expand',l)
                if not r:
                    break
            l = [i[1]-i[0]+1 for i in l]
            return max(l)
    

     我的思路就是模拟,括号肯定是一层一层的,所以我就从最里面一层开始,慢慢往外拓展(expand),如果拓展不了,说明就这些了。然后找到最大的区间就好了。

    我的思路基本跟暴力差不多,所以性能很差。

    这道题的题目描述有点问题。“找出最长的包含有效括号的子串的长度”容易让人误解,这里的子串实际上指的是连续子串。

    看官方题解,给了三种方法。分别是dp,栈和贪心。这三种我都没怎么看懂。。

    把链接放下面,什么时候想起来了再去研究研究 https://leetcode-cn.com/problems/longest-valid-parentheses/solution/zui-chang-you-xiao-gua-hao-by-leetcode-solution/

    不过第一个dp我觉得解释的似乎有点问题。dp[i]定义的是到i结尾的字符串的最长有效括号的长度。

    但是我用题解的代码,跑测试样例"())()",得到的dp数组为0,2,0,0,2

    一共五个括号,中间那个括号,按照dp数组的定义,不应该是2嘛。这里我没相同,是题解有问题还是我没理解对?

  • 相关阅读:
    DataTable用中使用Compute 实现简单的DataTable数据的统计
    绑定生成一个有树结构的下拉菜单
    Docker--UI管理-----------Portainer安装部署使用
    调整系统的inode数量
    配置Linux服务器从第三方 SMTP 服务器外发邮件
    Jenkins的用户角色权限管理
    shell脚本----MongoDB4.0.21一键安装
    Shell----监控CPU/内存/负载高时的进程
    MySQL配置参数优化
    shell脚本实现---Zabbix5.0快速部署
  • 原文地址:https://www.cnblogs.com/digdig/p/13237206.html
Copyright © 2011-2022 走看看