從串列每一個元素當開始,往後一個一個元素加進去
- 看到'('就+1,看到')' 就-1
- 若計到0就代表是一串合法的組合
- 若>0 則代表這串中間有合法的組合(一到多組),開頭往後一個元素
- 若計到-1代表這串不合法,因此這串不用再檢查,下一個run檢查的開頭就跳到這串之後
這樣做出來結果正確,但是時間複雜度太高,會跑到timeout
後來用stack 的方式處理,只需O(n)的時間複雜度:
- 看到'('
- push -1 到stack
- 看到')'時
- 開始從stack pop 出一個元素
- 若>0,代表這中間合法組合的長度,要暫存下來,然後繼續pop
- 若是-1(,代表找到'('),可組成合法的組合"()",因此合法的長度可以在+2 後丟入stack
- 順便判斷若目前合法長度已經超過目前看到的最大值,則update最大值
source code: https://github.com/cy-arduino/leetcode/blob/master/32.%20Longest%20Valid%20Parentheses.py
沒有留言:
張貼留言