Given a string s containing only three types of characters: '('
, ')'
and '*'
, return true
if s is valid.
The following rules define a valid string:
- 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""
.
Input: s = "()"
Output: true
Input: s = "(*)"
Output: true
Input: s = "(*))"
Output: true
1 <= s.length <= 100
s[i]
is'('
,')'
or'*'
.
-
Time complexity:
O(n)
-
Space complexity:
O(1)
class Solution:
def checkValidString(self, s: str) -> bool:
cmin = cmax = 0
for ch in s:
if ch == '(':
cmax += 1
cmin += 1
if ch == ')':
cmax -= 1
cmin = max(cmin - 1, 0)
if ch == '*':
cmax += 1
cmin = max(cmin - 1, 0)
if cmax < 0:
return False
return cmin == 0