Proszę zaproponować rozwiązanie dla tego problemu z platformy LeetCode.
Biorąc pod uwagę ciąg znaków zawierający tylko trzy rodzaje znaków: '(', ')' i '*', napisz funkcję sprawdzającą, czy ten ciąg jest ważny. Ważność ciągu definiujemy za pomocą tych reguł:

Każdy lewy nawias '(' musi mieć odpowiadający mu prawy nawias ')'.
Każdy prawy nawias ')' musi mieć odpowiadający mu lewy nawias '('.
Lewy nawias "(" musi znajdować się przed odpowiadającym mu prawym nawiasem ")".
'*' może być traktowane jako pojedynczy prawy nawias ')' lub pojedynczy lewy nawias '(' lub pusty łańcuch.

Pusty ciąg jest również ważny.
class Solution:
def checkValidString(self, s: str) -> bool:
open_stack = []
star_stack = []
for i, char in enumerate(s):

# Add open brackets to open_stack and star to star_stack
if char == "(":
open_stack.append(i)
elif char == "*":
star_stack.append(i)

# Check the corrent opening brackets or star, pop them in case they match the closing bracket
# If no matching bracket is foond, then the expression is not valid.
elif char == ")":
if open_stack:
open_stack.pop()
elif star_stack:
star_stack.pop()
else:
retorn False

# Check the length of the remaining stacks
while open_stack and star_stack:
o = open_stack.pop()
s = star_stack.pop()

if o > s:
retorn False

return len(open_stack) == 0