链接:https://leetcode.com/problems/valid-parenthesis-string/description/
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: True
Example 2:
Input: "(*)" Output: True
Example 3:
Input: "(*))" Output: True
x and y track the min and max possible number of left parenthesis as we traverse the string.
- If both the min and max fall below 0, then we have an invalid string.
- If min falls below 0 and max is above zero, set the min to 0.
- If min is zero at the end of the string, we have a valid string.
class Solution {
public:
bool checkValidString(string s) {
int x = 0;
int y = 0;
for (int i = 0; i < s.size(); ++i)
{
if (s[i] == '(')
{
++x;
++y;
}
else if (s[i] == '*')
{
--x;
++y;
}
else
{
--x;
--y;
}
if (x < 0 && y < 0)
{
return false;
}
else if (x < 0)
{
x = 0;
}
}
return x == 0;
}
};