難度:困難
這道題與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...