Leetcode 678 - Valid Parenthesis String

題目

Problem#

給你一個字串 s 其中只包含三種字元: (, ), *,所有的括號必須左右匹配,右括號必須在左括號後面,星號可以變成左、右括號、或空字串,回傳字串 s 是否合法。

測資限制#

  • $1 \le n \le 100$

想法#

掃過一次 s,如果遇到 (* 則記錄位置,接著如果遇到 ) 先看能不能和 ( 配對,如果不行再看能不能和 * 配對,如果都不行則代表字串 s 不合法。
掃完字串後,先前紀錄的 ( 如果沒有配對完,則要看剩下的 * 能不能全部配對完,配對的前提是: * 必須出現在 ( 之後(替代 )),如果不能配對完,則代表不合法;反之則合法。

AC Code#

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(n)$

賞析#

TODO 官方題解 DP