2019年3月13日 星期三

[leetcode][python]32. Longest Valid Parentheses

這題一開始想用記數去做,
從串列每一個元素當開始,往後一個一個元素加進去

  • 看到'('就+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


沒有留言:

張貼留言