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.
classSolution: defcheckValidString(self, s: str) -> bool: old_set = set([0]) for c in s: new_set = set() if c == '(': for t in old_set: new_set.add(t + 1) elif c == ')': for t in old_set: if t > 0: new_set.add(t - 1) elif c == '*': for t in old_set: new_set.add(t + 1) new_set.add(t) if t > 0: new_set.add(t - 1) old_set = new_set return0in old_set