Given a string `s` containing only three types of characters: '(', ')' and '*', return true if `s` is valid. '*' could be treated as a single right parenthesis ')', a single left parenthesis '(', or an empty string.
Greedy Bi-directional Bounds
A simple count won't work because `*` has three possibilities. Instead, we track the RANGE of possible open brackets `[leftMin, leftMax]`. When we see '(', both min and max increase. When we see ')', both decrease. When we see '*', the range widens: min decreases (treat as closing) and max increases (treat as opening). If `leftMax` ever drops below 0, it's impossible. If `leftMin` drops below 0, reset it to 0 because we can't have negative brackets. Finally, `leftMin == 0` must be possible.