#+ANKI_DECK: study_deck_02 * TODO 0678. Valid Parenthesis String :medium: :PROPERTIES: :NEETCODE: [[file:../../roadmap.org::*0678. Valid Parenthesis String][0678. Valid Parenthesis String]] :END: 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 1:* #+begin_src Input: s = "()" Output: true #+end_src *Example 2:* #+begin_src Input: s = "(*)" Output: true #+end_src *Example 3:* #+begin_src Input: s = "(*))" Output: true #+end_src *Constraints:* - ~1 <= s.length <= 100~ - ~s[i]~ is ~'('~, ~')'~ or ~'*'~. ** TODO Approach Write your approach here. ** TODO Python #+begin_src python :lc-problem 678 :lc-lang python3 class Solution: def checkValidString(self, s: str) -> bool: #+end_src ** TODO C++ #+begin_src cpp :lc-problem 678 class Solution { public: bool checkValidString(string s) { } }; #+end_src