leetcode 678. Valid Parenthesis String
阿新 • • 發佈:2021-11-19
leetcode 678. Valid Parenthesis String
題目描述
字元'*'可當作是'('或')'或空字元,判斷一個括號字串是否匹配
思路
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; } };