Python描述 LeetCode 32. 最长有效括号
大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号 GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.
本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。
题目
给你一个只包含 '('
和 ')'
的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
示例 2:
示例 3:
提示:
-
0 <= s.length <= 3 * 104
-
s[i]
为'('
或')'
解题思路
动态规划。dp[i]表示以s[i]结尾的最长有效括号长度
-
s[i] = '('
,以(
结尾一定不能构成有效括号,为0 -
s[i] = ')'
,此时有两种情况:
-
s[i-1] = '('
:此时s[i]和s[i-1]刚好可以构成一个有效括号,那么可以和前面以s[i-2]结尾的最长序列连起来,即dp[i] = dp[i-2]+2
-
s[i-1] = ')'
:此时s[i-1]的)可能也前面构成一个最长有效序列(()....()),那么这个有效序列开始的位置即i - dp[i-2]
- 如果此序列开始的前一个位置为
'('
的话,那么可以和当前的)
构成一个有效序列,同时还可以和dp[i - dp[i-2]-2]
连起来 - 如果前一个位置是
)
,则不能构成有效括号序列
Python描述