LC678 - Valid Parenthesis String
Problem
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"".
Example
Input: s = "()"
Output: true
Solution
Greedy
Seems to be a parsing problem, solvable in with no extra space used.
def checkValidString(self, s: str) -> bool:
leftMin = 0
leftMax = 0
for char in s:
if char == '(':
leftMin += 1
leftMax += 1
elif char == ')':
leftMin -= 1
leftMax -= 1
# char is **
else:
leftMin -= 1
leftMax += 1
# Reset to 0 because wilds can be left unused
if leftMin < 0:
leftMin = 0
# more rights than left + wild
if leftMax < 0:
return False
# True unless left > right
if leftMin == 0:
return True
return False
Last updated