LeetCode - 678 解題紀錄
題目: LeetCode - 678. Valid Parenthesis String
題目說明
給一個字串,裡面只會有三種字元,(、)、*,要求檢驗字串是否有效。字串有效須滿足以下條件:
- 任何的左括弧必須要有對應的右括弧
- 任何的右括弧必須要有對應的右括弧
- 左括弧必須在對應的右括弧前面
※ * 號可代表左括弧、右括弧或空字元。
解題思路
可想像成左括弧會與最近的右括弧相消,所以使用一個 count 來記數,碰到左括弧就 + 1,碰到右括弧就 - 1。但是由於還有一個 * 號,而 * 可以是左括弧、右括弧或空字元,所以它可能會 + 1、- 1、或不變,以至於我們的 count 會是一個範圍,所以使用 max、 min 來做記數。在碰到括弧時一樣正常的 + 1、- 1,但碰到 * 號的話,max + 1、min - 1,而在做的期間 max 不可小於 0,因為 max 小於 0 的話代表會有右括弧前面沒有對應的左括弧,那這個字串就一定不是有效的,所以就直接回傳 False,而 min 也不能小於 0,因為 min 若是 0 的話代表 * 號只能當作左括弧或空字元,不能是右括弧。
參考解法
1 | class Solution { |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Larry's notes!
評論