1. 程式人生 > 其它 >leetcode 678. Valid Parenthesis String

leetcode 678. Valid Parenthesis String

leetcode 678. Valid Parenthesis String

leetcode 678

題目描述

字元'*'可當作是'('或')'或空字元,判斷一個括號字串是否匹配

思路

cmax,cmin記錄當前左括號的取值範圍為[cmin,cmax],'*'當作'(',則cmax+=1,'*'當作')',則匹配一個左括號cmin-=1,若當作空字元,則無事發生。

若cmax<0,說明前面所有的'*'都當作'('也不夠匹配當前')',匹配失敗
若cmin<0,說明如果前面所有的'*'都當作),則(已經不夠用,失配了,所以必須將|cmin|數量的'*'當作是空字元。cmin=max(0,cmin)

最後檢查cmin是否等於0,來判斷是否能括號匹配。

code

class Solution {
public:
    bool checkValidString(string s) {
        int cmin=0,cmax=0;
        for(char c : s)
        {
            if(c=='(')
            {
                cmin++;
                cmax++;
            }
            else if(c==')')
            {
                cmin--;
                cmax--;
            }
            else if(c=='*')
            {
                cmax++;
                cmin--;
            }
            if(cmax<0)
                return false;
            cmin=max(0,cmin);
        }
        return cmin==0;
    }
};