题目
思路分析1
题目要求:求最长的括号匹配字符串
- 暴力 遍历 判断
时间复杂度,通过不了
代码展示1
def isValid(self, s: str) -> bool:
#把列表当作栈使用
stack = []
for i in s:
#如果左括号 入栈。
if i =='(':
stack.append(i)
#如果右括号 出栈
else:
if stack==[]:
return False
else:
stack.pop()
return stack==[]
def longestValidParentheses1(self, s: str) -> int:
if s =="":
return 0
i =0
j = len(s)
res = []
#两边往中间靠,寻找匹配字串
while i<j:
while i<j:
if (j-i)%2==0 and self.isValid(s[i:j]):
res.append(j-i)
break
else:
i+=1
print(i,j,res)
i=0
j-=1
print(res)
if res == []:
return 0
resnum = max(res)
return resnum
def longestValidParentheses2(self, s: str) -> int:
slen = len(s)
# res =[]
maxlen = 0
#从左往右,每2个判断一次
for i in range(slen-1):
j = i
while j<slen:
j+=2
if self.isValid(s[i:j]):
# res.append(j-i)
if (j-i)>maxlen:
maxlen = j-i
return maxlen
思路分析2
- 动态规划(其实就是在找规律)
思路参考(java)
代码展示2
def longestValidParentheses(self, s: str) -> int:
slen = len(s)
res = []
for i in range(slen):
res.append(0)
resmax = 0
for i in range(1,slen):
if s[i] ==')':
if s[i-1]=='(':
res[i] = 2 if i<2 else res[i-2]+2
elif i-res[i-1]>0 and s[i-res[i-1]-1]=='(':
pre = res[i-res[i-1]-2] if i-res[i-1]>=2 else 0
res[i] = res[i-1]+2+pre
resmax = max(res)
return resmax