Valid Parenthesis String
Created: April 16, 2020 by [lek-tin]
Last updated: April 16, 2020
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
Note
- The string size will be in the range [1, 100].
Solution
class Solution:
def checkValidString(self, s: str) -> bool:
opens, closes = 0, 0
for c in s:
opens += 1 if c == "(" else -1
closes -= 1 if c == ")" else -1
if closes < 0: break
opens = max(opens, 0)
return opens == 0