【LeetCode - 32】最长有效括号
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode - 32】最长有效括号
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個只包含 '(' 和 ')' 的字符串,找出最長有效(格式正確且連續)括號子串的長度。
示例 1:
輸入:s = "(()"
輸出:2
解釋:最長有效括號子串是 "()"
示例 2:
輸入:s = ")()())"
輸出:4
解釋:最長有效括號子串是 "()()"
示例 3:
輸入:s = ""
輸出:0
?
提示:
0 <= s.length <= 3 * 104
s[i] 為 '(' 或 ')'
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-valid-parentheses
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解題報告:
一題多解問題。
解法一是DP,比較好想,思路也很清晰,就是寫起來有點丑陋。dp[i]代表以i為結尾的最長序列長度。
解法二可以用棧,合并的思路和OAE思想的結合。
AC代碼1:(dp的思路)
class Solution { public:int dp[55555];int longestValidParentheses(string s) {int n = s.size();if(s[1] == ')' && s[0] == '(') dp[1] = 2;for(int i = 2; i<n; i++) {if(s[i] == ')') {if(s[i-1] == ')') {if(i-1-dp[i-1]>=0 && s[i-1-dp[i-1]] == '(')dp[i] = dp[i-1]+2 + ((i-1-dp[i-1]-1>=0)?dp[i-1-dp[i-1]-1]:0);else dp[i] = 0; } else dp[i] = dp[i-2] + 2;}}int ans = 0;for(int i = 0; i<n; i++) ans = max(ans, dp[i]);return ans;} };AC代碼2:(棧)
參考wjh巨佬的博客
【LeetCode - 32】最長有效括號___似水流年__的博客-CSDN博客
總結
以上是生活随笔為你收集整理的【LeetCode - 32】最长有效括号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G超速了!全新骁龙7体验:20秒下载一
- 下一篇: 【LeetCode每日一题】2024.