leetcode 32 最長有效括號

2021-10-17 14:20:56 字數 1571 閱讀 1895

題目:32. 最長有效括號鏈結

思路:

方法一:棧

看到括號匹配問題首先想到棧,這題求連續匹配的括號長度,因此我們首先想到如何指定彈棧,入棧的規則。

首先 需要明確棧中存的是下標,並不是元素值

s.

push(-1);

-1為了 後面計算maxlen方便進行的, 不用擔心越界問題,因為-1下標,並不會直接使用。

入棧規則 :代表著等待彈出

if

(str[i]

=='('

)

出棧規則:這代表著經過出棧後,

1.原棧中若是空,則代表著不用更新元素maxlen值,直接將i入棧,入棧後,棧不為空

2.棧中不為空,那麼也就是說,剛才直接彈出棧的是str[i]=』(』,,又找到一隊匹配括號,然後我們可以更新maxlen的值。

if

(str[i]

==')'

)

方法二:正向遍歷,逆向遍歷遍歷兩次,空間複雜度是o(1) 存在兩個變數 乙個記錄左括號個數,乙個記錄右括號個數

1.正向遍歷時

保證左括號個數大於等於右括號個數 相等時更新maxlen

2.逆向遍歷 保證左括號個數小於等於右括號個數 相等時更新maxlen

方法三:動態規劃

**:

方法一

class

solution

else

if(str[i]

==')'

)else}}

return maxlen;}}

;

方法二

class

solution

else

if(str[i]

==')'

)else

if(rightcount>leftcount)

//已經不連續了}}

//下面就是逆向遍歷了。改改

leftcount=0;

rightcount=0;

for(

int i=str.

size()

-1;i>=

0;i--

)//逆向

else

if(str[i]

=='('

)else

if(rightcount>leftcount)

//已經不連續了}}

return maxlen;}}

;

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...