这道题我还是没思路,看了别人的做法觉得豁然开朗简单明了!!!!

栈:

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        if not s:
            return 0
        res=[]
        stack=[]
        for i in range(len(s)):
            if stack and s[i]==')':
                res.append(stack.pop())
                res.append(i)
            if s[i]=='(':
                stack.append(i)
        res.sort()
        i=0
        ans=0
        n=len(res)
        while i<n:
            j=i
            while j+1<n and res[j+1]==res[j]+1:
                j+=1
            ans=max(ans,j-i+1)
            i=j+1
        return ans
执行用时 :88 ms, 在所有 python3 提交中击败了26.32%的用户
内存消耗 :14.5 MB, 在所有 python3 提交中击败了8.33%的用户
 
方法2:
动态规划:
题解讲得真清晰:
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        n=len(s)
        if n==0:return 0
        dp=[0]*n
        res=0
        for i in range(n):
            if i>0 and s[i]==')':
                if s[i-1]=='(':
                    dp[i]=dp[i-2]+2
                elif s[i-1]==')' and i-dp[i-1]-1>=0 and s[i-dp[i-1]-1]=='(':
                    dp[i]=dp[i-1]+2+dp[i-dp[i-1]-2]
                if dp[i]>res:
                    res=dp[i]
        return res    
执行用时 :48 ms, 在所有 python3 提交中击败了98.93%的用户
内存消耗 :13.8 MB, 在所有 python3 提交中击败了46.97%的用户
 
                                                                                    ——2019.10.17
 
 
 
02-14 01:27