大家好,今天给各位分享Python编程:解析LeetCode——最长有效括号问题详解的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
特别注意:栈是否为空
参考代码如下:
类解决方案:
def 最长有效括号(self, s):
"""
:型s: str
:rtype: 整数
"""
如果len(s)==0 或len(s)==1:
返回0
堆栈=[]
j=0
最大长度=0
而j len(s):
如果s[j]=="(":
堆栈.追加(j)
如果s[j]==")":
如果len(stack) 和s[stack[-1]]=="(":
堆栈.pop()
iflen(堆栈):
镜头=j - 堆栈[-1]
如果镜头max_len:
max_len=镜头
否则:
透镜=j+1
如果镜头max_len:
max_len=镜头
否则:
堆栈.追加(j)
j +=1
return max_len 解决方案2:动态规划(待更新)
动态规划的思想是,我们用一个list:dp来记录字符串s中第i个元素的有效匹配长度。
只有当前字符为“)”时才可能匹配,所以我们重点关注两种情况:“()”和“))”
"()":dp[i]=dp[i - 2] + 2 #历史匹配数直接加22。"))":
if i - dp[i-1] - 1=0: # 确保没有超出索引
if s[i - dp[i - 1] - 1]=="(": #最后一个“)”是否匹配
dp[i]=dp[i - 1] + dp[i - dp[i - 1] - 2] + 2 # 将2添加到历史匹配中。完整代码如下:
类解决方案:
def 最长有效括号(self, s):
"""
:型s: str
:rtype: 整数
"""
dp=[]
镜头=镜头
如果镜头2:
返回0
# 初始化dp 列表
j=0
而j镜头:
dp.追加(0)
j +=1
我=1
当我镜头:
如果s[i]==")" 且s[i - 1]=="(":
dp[i]=dp[i - 2] + 2
如果s[i]==s[i - 1]==")":
如果i - dp[i-1] - 1=0:
如果s[i - dp[i - 1] - 1]=="(":
dp[i]=dp[i - 1] + dp[i - dp[i - 1] - 2] + 2
我+=1
返回max(dp)源码地址:
https://github.com/jediL/LeetCodeByPython
OK,本文到此结束,希望对大家有所帮助。
【Python编程:解析LeetCode——最长有效括号问题详解】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章正好是我现在在学习的!终于有人来讲解这个题了。
有19位网友表示赞同!
感觉LeetCode上找答案真难,有了这种详细的 python 解释才能好好理解
有18位网友表示赞同!
32题一直是个挑战,期待学习一下你的解法!
有9位网友表示赞同!
我想知道这道题还有哪些优化空间吗?
有14位网友表示赞同!
Python 代码写起来还是比较舒服啊。
有18位网友表示赞同!
最长有效括号这个概念很有意思,真想深入了解一下
有10位网友表示赞同!
分享这份讲解的同学牛逼!太实用了!
有10位网友表示赞同!
看到这篇文章我就决定好好刷LeetCode了。
有6位网友表示赞同!
感谢这种干货满满的解答,以后遇到类似问题可以参考参考。
有17位网友表示赞同!
LeetCode真有意思,每次都能学到一些新的知识点。
有17位网友表示赞同!
这段代码写的真是太精简了!佩服你的水平啊
有14位网友表示赞同!
希望你以后也能讲解其他的 LeetCode 题目!
有7位网友表示赞同!
最长有效括号这个问题在工作中可能会用到吗?
有17位网友表示赞同!
这篇文章真的很好理解,比那些模糊不清的答案好多了
有10位网友表示赞同!
学习LeetCode 的主要目的是为了提高编程能力吧
有19位网友表示赞同!
这种讲解方式太适合我这种入门者了!
有14位网友表示赞同!
感觉自己离成为一名合格程序员还有很远的路要走啊!
有19位网友表示赞同!
希望我能像作者一样写出清晰易懂的代码!
有12位网友表示赞同!
我要把这篇文章收藏起来,留着以后参考!
有8位网友表示赞同!
学习编程真是件很有意思的事情!
有8位网友表示赞同!