LeetCode hot 100—最長有效括號

題目

給你一個只包含?'('?和?')'?的字符串,找出最長有效(格式正確且連續)括號子串的長度。

示例

示例 1:

輸入:s = "(()"
輸出:2
解釋:最長有效括號子串是 "()"

示例 2:

輸入:s = ")()())"
輸出:4
解釋:最長有效括號子串是 "()()"

示例 3:

輸入:s = ""
輸出:0

分析

可以使用動態規劃的方法來解決這個問題。我們定義一個數組?dp,其中?dp[i]?表示以?s[i]?結尾的最長有效括號子串的長度。

動態規劃

代碼解釋

初始化n?為字符串?s?的長度。dp?數組初始化為 0,長度為?nmaxLength?用于記錄最長有效括號子串的長度,初始化為 0。

動態規劃過程

  • 遍歷字符串?s,從第二個字符開始(因為第一個字符不可能組成有效括號子串)。
  • 如果當前字符是?)
    • 情況一:如果前一個字符是?(,則可以與前一個字符組成一對有效括號。此時?dp[i]?等于?dp[i - 2](如果?i >= 2)加上 2。
    • 情況二:如果前一個字符也是?),則需要檢查更前面的字符是否能組成有效括號。如果?i - dp[i - 1] > 0?且?s[i - dp[i - 1] - 1] == '(',則?dp[i]?等于?dp[i - 1]?加上?dp[i - dp[i - 1] - 2](如果?i - dp[i - 1] >= 2)再加上 2。
  • 更新?maxLength?為?dp[i]?和?maxLength?中的較大值。

返回結果

  • 最后返回?maxLength,即最長有效括號子串的長度。

時間復雜度:O(n),n?是字符串的長度

空間復雜度:O(n)

class Solution {
public:int longestValidParentheses(string s) {int n = s.length();if (n == 0) return 0;// dp[i] 表示以 s[i] 結尾的最長有效括號子串的長度vector<int> dp(n, 0);int maxLength = 0;for (int i = 1; i < n; ++i) {if (s[i] == ')') {if (s[i - 1] == '(') {// 如果當前字符是 ')' 且前一個字符是 '(',則可以與前一個字符組成一對有效括號dp[i] = (i >= 2? dp[i - 2] : 0) + 2;} else if (i - dp[i - 1] > 0 && s[i - dp[i - 1] - 1] == '(') {// 如果當前字符是 ')' 且前一個字符也是 ')',則需要檢查更前面的字符是否能組成有效括號dp[i] = dp[i - 1] + (i - dp[i - 1] >= 2? dp[i - dp[i - 1] - 2] : 0) + 2;}maxLength = max(maxLength, dp[i]);}}return maxLength;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3集成sass

安裝依賴 pnpm add -D sass-embedded配置全局變量 新建文件 src/styles/variables.scss配置Vite 修改 vite.config.ts variables.scss $base-color: bluevite.config.ts // https://vite.dev/config/ export default defineConfig({plugins: [vue(),],resolve: {alias: {:…

【力扣題目分享】棧專題(C++)

目錄 關于棧的題目&#xff1a; 1. 最小棧&#xff1a; 思路&#xff1a; 實現代碼(最終)&#xff1a; 2. 棧的壓入、彈出序列&#xff1a; 思路&#xff1a; 實現代碼&#xff1a; 3. 逆波蘭表達式求值&#xff1a; 思路&#xff1a; 實現代碼&#xff1a; 深入了解…

Office 2019 (含Visio+Project)官方IOS 下載

Microsoft Office 2019 是微軟公司推出的一款辦公軟件套裝&#xff0c; 主要包括Word、Excel、PowerPoint、Outlook、Visio、Access、Publisher、OneDrive for Business 和Skype for Business等組件。 這些組件適用于Windows和MacOS平臺&#xff0c;支持多種語言&#xff0c…

遙測終端機,推動灌區流量監測向數據驅動躍遷

灌區范圍那么大&#xff0c;每一滴水怎么流都關系到糧食夠不夠吃&#xff0c;還有生態能不能平衡。過去靠人工巡查、測量&#xff0c;就像拿著算盤想算明白大數據&#xff0c;根本滿足不了現在水利管理的高要求。遙測終端機一出現&#xff0c;就像給灌區流量監測安上了智能感知…

P4017 最大食物鏈計數-拓撲排序

P4017 最大食物鏈計數 題目來源-洛谷 題意 要求最長食物鏈的數量。按照題意&#xff0c;最長食物鏈就是指有向無環圖DAG中入度為&#xff10;到出度為&#xff10;的不同路徑的數量&#xff08;鏈數&#xff09; 思路 在計算時&#xff0c;明顯&#xff1a;一個被捕食者所…

Xmind快捷鍵大全

常規 插入主題和元素&#xff08;常用&#xff09; 編輯主題文本和樣式 選擇和移動 調整畫布和視圖 工具和其他

四. 以Annoy算法建樹的方式聚類清洗圖像數據集,一次建樹,無限次聚類搜索,提升聚類搜索效率。(附完整代碼)

文章內容結構&#xff1a; 一. 先介紹什么是Annoy算法。 二. 用Annoy算法建樹的完整代碼。 三. 用Annoy建樹后的樹特征匹配聚類歸類圖像。 一. 先介紹什么是Annoy算法 下面的文章鏈接將Annoy算法講解的很詳細&#xff0c;這里就不再做過多原理的分析了&#xff0c;想詳細了解…

什么是電容?

什么是電容&#xff1f; 電荷與電壓的比值就是電容量C。電容單位為法拉(F)。1法拉電容器在電壓為1V時儲存的電荷量為1庫倫(C)。圖1.1中的球體表面電壓與儲存的電荷Q關聯。電壓V等于。Q/V等于。如果球體位于電介質媒介中&#xff0c;電壓V降低倍&#xff0c;Q/V等于。在電介質媒…

Linux服務器上mysql8.0+數據庫優化

1.配置文件路徑 /etc/my.cnf # CentOS/RHEL /etc/mysql/my.cnf # Debian/Ubuntu /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian檢查當前配置文件 sudo grep -v "^#" /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "^$&q…

MQTT學習資源

MQTT入門&#xff1a;強烈推薦

第十二章 Python語言-大數據分析PySpark(終)

目錄 一. PySpark前言介紹 二.基礎準備 三.數據輸入 四.數據計算 1.數據計算-map方法 2.數據計算-flatMap算子 3.數據計算-reduceByKey方法 4.數據計算-filter方法 5.數據計算-distinct方法 6.數據計算-sortBy方法 五.數據輸出 1.輸出Python對象 &#xff08;1&am…

【XR手柄交互】Unity 中使用 InputActions 實現手柄控制詳解(基于 OpenXR + Unity新輸入系統(Input Actions))

摘要&#xff1a; 本文主要介紹如何使用 Input Actions&#xff08;Unity 新輸入系統&#xff09; OpenXR 來實現 VR手柄控制&#xff08;監聽ABXY按鈕、搖桿、抓握等操作&#xff09;。 &#x1f3ae; Unity 中使用 InputActions 實現手柄控制詳解&#xff08;基于 OpenXR 新…

java實現網格交易回測

以下是一個基于Java實現的簡單網格交易回測程序框架&#xff0c;以證券ETF&#xff08;512880&#xff09;為例。代碼包含歷史數據加載、網格策略邏輯和基礎統計指標&#xff1a; import java.io.BufferedReader; import java.io.FileReader; import java.text.ParseException…

探秘 3D 展廳之卓越優勢,解鎖沉浸式體驗新境界

&#xff08;一&#xff09;打破時空枷鎖&#xff0c;全球觸達? 3D 展廳的首要優勢便是打破了時空限制。在傳統展廳中&#xff0c;觀眾需要親臨現場&#xff0c;且必須在展廳開放的特定時間內參觀。而 3D 展廳依托互聯網&#xff0c;讓觀眾無論身處世界哪個角落&#xff0c;只…

第十二屆藍橋杯 2021 C/C++組 直線

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 兩點確定一條直線&#xff1a; 思路詳解&#xff1a; 代碼&#xff1a; 第一種方式代碼詳解&#xff1a; 第二種方式代碼詳解&#xff1a; 題目&#xff1a;…

微信小程序藍牙連接打印機打印單據完整Demo【藍牙小票打印】

文章目錄 一、準備工作1. 硬件準備2. 開發環境 二、小程序配置1. 修改app.json 三、完整代碼實現1. pages/index/index.wxml2. pages/index/index.wxss3. pages/index/index.js 四、ESC/POS指令說明五、測試流程六、常見問題解決七、進一步優化建議 下面我將提供一個完整的微信…

ubuntu opencv 安裝

1.ubuntu opencv 安裝 在Ubuntu系統中安裝OpenCV&#xff0c;可以通過多種方式進行&#xff0c;以下是一種常用的安裝方法&#xff0c;包括從源代碼編譯安裝。請注意&#xff0c;安裝步驟可能會因OpenCV的版本和Ubuntu系統的具體版本而略有不同。 一、安裝準備 更新系統&…

【C++】class靜態常量

Usage: static const T 1 background static const成員屬于類&#xff0c;而不是類的實例&#xff0c;所以它們的初始化需要在類外進行(或者在C17之后可以用inline初始化)。 使用中可能遇到的情況&#xff1a; 在頭文件中聲明一個static const成員&#xff0c;然后在多個cpp…

Java 安全:如何防止 DDoS 攻擊?

一、DDoS 攻擊簡介 DDoS&#xff08;分布式拒絕服務&#xff09;攻擊是一種常見的網絡攻擊手段&#xff0c;攻擊者通過控制大量的僵尸主機向目標服務器發送海量請求&#xff0c;致使服務器資源耗盡&#xff0c;無法正常響應合法用戶請求。在 Java 應用開發中&#xff0c;了解 …

統計文件中單詞出現的次數并累計

# 統計單詞出現次數 fileopen("E:\Dasktape/python_test.txt","r",encoding"UTF-8") f1file.read() # 讀取文件 countf1.count("is") # 統計文件中is 單詞出現的次數 print(f"此文件中單詞is出現了{count}次")# 2.判斷單詞出…