LeetCode 最长有效括号
题目:
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
题目分析:
最长有效括号子串包含两种情况:
例1:
(())
有效子串长为4
例2:
()()
有效子串长为4
所以在处理的时候分情况讨论
首先编写校验字符串是否有效的函数:
def validate_str(str):
if len(str) == 2:
if str[0] == '(' and str[1] == ')':
return True
else:
return False
if str[-1] == ')' and str[-2] == '(':
res = validate_str(str[:-2])
elif str[0] == '(' and str[1] == ")" and str[2] == "(":
res = validate_str(str[2:])
elif str[0] == '(' and str[-1] == ")":
res = validate_str(str[1:-1])
else:
res = False
return res
后续要想得出最长有效括号就是把括号替换掉,同时保留替换的过程。
完整代码如下
class Solution:
def longestValidParentheses(self, s) -> int:
s_len = len(s)
legal_list = []
# 根据字符串长度 构建有效括号list
if s_len % 2:
s_half_len = int((s_len - 1) / 2)
else:
s_half_len = int(s_len / 2)
if s_half_len < 1:
return 0
for i in range(s_half_len):
src_str = '(' + i * '__' + ')'
legal_list.append(src_str)
# 更新原有s
max_sub = 0
for idx, sub in enumerate(legal_list):
if sub in s:
s = s.replace(sub, (idx + 1) * '__')
max_sub = sub
# 获取最长下划线
s = s.replace(')', '(')
new_s_list = s.split('(')
max_len = 0
for idx, ele in enumerate(new_s_list):
if len(ele) > max_len:
max_len = len(ele)
return max_len
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端