LeetCode678. Valid Parenthesis String(Medium)#Stack

 給定一含括弧字串,內另含*符號,可替代為  (  or  ) or 空字元

字串有效須滿足以下條件:
任何的左括弧必須要有對應的右括弧
任何的右括弧必須要有對應的右括弧
左括弧必須在對應的右括弧前面


可想像成左括弧會與最近的右括弧相消,使用一個 count 來記數,碰到左括弧就 + 1,碰到右括弧就 - 1。但由於還有一個 * 號,而 * 可以是左括弧、右括弧或空字元,所以它可能會 + 1、- 1、或不變,以至於我們的 count 會是一個範圍,所以使用 max、 min 來做記數。

在碰到括弧時一樣正常的 + 1、- 1,但碰到 * 號的話,max + 1、min - 1,而在做的期間 max 不可小於 0,因為 max 小於 0 的話代表會有右括弧前面沒有對應的左括弧,那這個字串就一定不是有效的,所以就直接返回 False,而 min 也不能小於 0,因為 min 若是 0 的話代表 * 號只能當作左括弧或空字元,不能是右括弧。


ans1.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
    bool checkValidString(string s) {
        int max = 0, min = 0;
        for(auto& i : s)
        {
            if(i == '(')
                ++min, ++max;
            else if(i == ')')
                --min, --max;
            else if(i == '*')
                --min, ++max;
            if(max < 0)
                return false;
            if(min < 0)
                min = 0;
        }
        return min == 0;
    }
};











Ref:
https://www.cnblogs.com/silentteller/p/12348010.html
https://blog.csdn.net/qq_27060423/article/details/83959401
http://codecrazer.blogspot.com/2017/09/leetcode-678-valid-parenthesis-string.html
https://www.larrysprognotes.com/LeetCode-678/

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header