leetcode32.最長有效括號
阿新 • • 發佈:2021-11-02
leetcode32.最長有效括號
題目
給你一個只包含 '('
和 ')'
的字串,找出最長有效(格式正確且連續)括號子串的長度。
用例
輸入:s = "(()"
輸出:2
解釋:最長有效括號子串是 "()"
輸入:s = ")()())"
輸出:4
解釋:最長有效括號子串是 "()()"
輸入:s = ""
輸出:0
求解
方法一:暴力求法
/** * @param {string} s * @return {number} */ var longestValidParentheses = function(s) { let max_length = 0; let len = s.length; for(let i=0;i<len;i++){ let left = 0; let right = 0; for(j=i;j<len;j++){ s[j]=="("?left++:right++ if(right>left){ break; } if(right==left){ if(max_length<j-i+1){ max_length=j-i+1 } } } } return max_length };
方法二:動態規劃
/** * @param {string} s * @return {number} */ var longestValidParentheses = function(s) { let max_len = 0; const len =s.length //建立dp[i]陣列 const dp = new Array(len).fill(0); for(let i=0;i<len;i++){ if(s[i]=='('){ dp[i]=0 }else if(s[i]==')'){ if(i-1<0){ dp[i]=0 }else{ if(s[i-1]=='('){ if(i-2<0){ dp[i]=2 }else{ dp[i]=2+dp[i-2] } }else if(s[i-1]==')'){ if(i-dp[i-1]-1<0||s[i-dp[i-1]-1]==')'){ dp[i]=0 }else{ if(i-dp[i-1]-2<0){ dp[i]=2+dp[i-1] }else{ dp[i]=2+dp[i-1]+dp[i-dp[i-1]-2] } } } } } if(dp[i]>max_len){ max_len=dp[i] } } return max_len };