算法学习打卡计划

leetcode第三十二题 —— 最长有效括号

2019-12-11  本文已影响0人  不分享的知识毫无意义

1.题目

原题:

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

例子:

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

2.解析

这道题可以好好盘一盘我的心路历程,里边全是坑,大家注意避着点。
先来说正确解法:栈和动态规划。
栈是这次考虑的重点,动态规划以后有空再补充。

2.1 我的错误做法

当时我思考的栈解决问题,但是我考虑的太复杂了,甚至加了双指针。

2.2 正确做法

做出这道题总共分三步:
第一步,整个循环,遍历输入字符串。
第二步,设置一个start,随时更新着,设置一个stack,记录下左括号的下标。
第三步,开始操作,按照上一节的疑点3操作,对着代码看,可能更清楚一点。

3.python代码

class Solution:
    def longestValidParentheses(self, s):
        nlen = len(s)
        i = 0
        new_stack = []
        lk = 0
        start = 0
        if nlen <= 1:
            return 0
        while i < nlen:
            # print(i)
            # print(new_stack)
            # print('start', start)
            if s[i] == '(':
                new_stack.append(i)
            else:
                if new_stack:
                    new_stack.pop()
                    if new_stack == []:
                        lk = max(lk, i - start + 1)
                    else:
                        # print(2)
                        lk = max(lk, i - new_stack[-1])
                else:
                    lk = max(lk, i - start)
                    start = i + 1
            i += 1
        return lk
上一篇 下一篇

猜你喜欢

热点阅读