https://leetcode.com/problems/valid-parenthesis-string/
Given a string containing only three types of characters: '(', ')' and '*', write a function to check whether this string is valid. We define the validity of a string by these rules:
- Any left parenthesis
'('
must have a corresponding right parenthesis')'
.- Any right parenthesis
')'
must have a corresponding left parenthesis'('
.- Left parenthesis
'('
must go before the corresponding right parenthesis')'
.'*'
could be treated as a single right parenthesis')'
or a single left parenthesis'('
or an empty string.- An empty string is also valid.
Example 1:
Input: "()" Output: TrueExample 2:
Input: "(*)" Output: TrueExample 3:
Input: "(*))" Output: TrueNote:
- The string size will be in the range [1, 100].
星号的引入使得未成匹的左括号个数成为了一个范围
注意范围左端点不能小于零
class Solution {
public:
bool checkValidString(string s) {
int lo = 0, hi = 0;
for(int i = 0; i < s.size(); ++i){
if(s[i] == '('){
++lo;
++hi;
}else if(s[i] == ')'){
--lo;
--hi;
}else{
--lo;
++hi;
}
if(lo < 0) lo = 0;
if(hi < 0) return false;
}
return lo == 0;
}
};