LeetCode 32 最長有效括號(棧)

2021-10-03 21:10:45 字數 909 閱讀 5009

難度:困難

這道題與leetcode–20. 有效的括號類似,leetcode20要求的是找出字串是否是有效的括號,我們利用的是模擬乙個棧的方法以及刪除法。這道題是來求最長有效括號,刪除法就行不通了,但是我們仍然可以使用棧的方法來解決。

- 棧(c)

模擬乙個棧的結構, 將字元挨個壓入棧中,如果字元匹配則彈出資料,記錄棧中的字元以及其對應的下標。遍歷完字串以後,棧中剩下的都是沒有匹配的字元以及下標。根據這些下標計算出最大的有效括號長。時間複雜度o(n)。

**如下

// 棧

intlongestvalidparentheses

(char

* s)

// s[i]元素與棧首的字元匹配時,將棧首的字元彈出

else

if(s[i]

!= stack[index]

&& s[i]

==')'

)// 否則,將s[i] 壓入棧中

else

}// 最終,label中存放的下標都是沒有匹配字元的下標,根據這些下標可以計算最長有效括號數

if(index <0)

return len;

else

}free

(stack)

;free

(label)

;return max;

}

執行結果如下:

LeetCode 32 最長有效括號

思路 自己沒想出來,參考了一下網上大神的提示。使用乙個int棧,將左括號記為 1,右括號記為 2 遍歷字串。1.若為 則直接壓入棧 2.若為 分情況討論 若棧頂為 2 或棧空,則直接將 2壓入棧 若棧容量為1,且棧頂為 1,將 1推出棧,推入2,代表此時有一對匹配括號 若棧容量為1,且棧頂大於0,說...

leetcode 32 最長有效括號

一 先對字串進行遍歷 首先從前往後排除不配對的 首次遍歷後的字串被分成若干個字串 再對這些字串 從後往前排除不配對的 int longestvalidparentheses std string s else if s j else t1 j 1 n 0 continue if max2 n max...

LeetCode32 最長有效括號

題目鏈結 500 800ms class solution else if s j for int i 0 ilength i if s i 0 result 0 if result k return result else return k 這絕不是最優解 幾十毫秒之內解決問題 class sol...