class Solution { public: int longestValidParentheses(string s) { if(s.size()<2) return 0; int n=s.size(); int res=0; vector<int> dp(n,0); //dp[i]表示以nums[i]结尾的最长有效子串长度 for(int i=1;i<n;i++){ if(s[i]==')'){ if(s[i-1]=='('){ //"()" dp[i]=((i-2)>=0)?dp[i-2]+2:2; } else if(s[i-1]==')'){ //"))" if(i-dp[i-1]-1>=0 && s[ i-dp[i-1]-1]=='('){ if(i-dp[i-1]-2>=0){ dp[i]=dp[i-1]+2 +dp[i-dp[i-1]-2]; } else{ dp[i]=dp[i-1]+2; } } } } res=max(res,dp[i]); } return res; } };