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;
}
};
LeetCode验证含星号括号字符串有效性
博客围绕LeetCode上验证含'(', ')'和'*'三种字符的字符串是否有效的问题展开。介绍了字符串有效的规则,星号可当作右括号、左括号或空字符串。还提到星号使未成匹的左括号个数成范围,且范围左端点不能小于零。

被折叠的 条评论
为什么被折叠?



