Navrhuji řešení tohoto problému na Leetcode.
Napište funkci, která zkontroluje, zda je řetězec platný, pokud obsahuje pouze tři typy znaků: '(', ')' a '*'. Platnost řetězce definujeme následujícími pravidly:

Každá levá závorka '(' musí mít odpovídající pravou závorku ')'.
Každá pravá závorka ')' musí mít odpovídající levou závorku '('.
Levá závorka '(' musí být před odpovídající pravou závorkou ')'.
'*' může být interpretováno jako jedna pravá závorka ')' nebo jedna levá závorka '(' nebo prázdný řetězec.

Prázdný řetězec je také platný.
Třída řešení:
    def checkValidString(self, s: str) -> bool:
        open_stack = []
        star_stack = []
        for i, char in enumerate(s):
            
            # Přidání otevíracích závorek do open_stack a hvězdiček do star_stack
            if char == "(":
                open_stack.append(i)
            elif char == "*":
                star_stack.append(i)
                
            # Kontrola aktuálních otevíracích závorek nebo hvězdiček, vyjmutí jich v případě, že odpovídají uzavírací závorce
            # Pokud není nalezena odpovídající závorka, výraz není platný.
            elif char == ")":
                if open_stack:
                    open_stack.pop()
                elif star_stack:
                    star_stack.pop()
                else:
                    return False

        # Kontrola délky zbývajících zásobníků
        while open_stack and star_stack:
            o = open_stack.pop()
            s = star_stack.pop()

            if o > s:
                return False

        return len(open_stack) == 0