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: return self.helper(s,0,0) defhelper(self, s, cnt, pos): ''' s:origin string cnt: the value of string pos: now index ''' for i inrange(pos,len(s)): # 考虑边界条件 if cnt < 0: returnFalse if s[i] == '(': cnt += 1 if s[i] == ')': cnt -= 1 if s[i] == '*': return self.helper(s,cnt+1,pos+1) or self.helper(s,cnt-1,pos+1) or self.helper(s,cnt,pos+1) return cnt == 0
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