给定一个仅包含三种字符'(', ')'和'*'的字符串，请编写一个函数来检查此字符串是否有效。我们通过以下规则定义字符串的有效性：

任何左括号'('必须有相应的右括号')'。任何右括号')'必须有相应的左括号'('。左括号'('必须在相应的右括号')'之前。
 '*'可以被视为单个右括号')'或单个左括号'('或空字符串。

空字符串也是有效的。
提出这个题目的Leetcode问题的解决方案
class Solution:
    def checkValidString(self, s: str) -> bool:
        open_stack = []
        star_stack = []
        for i, char in enumerate(s):
            
            # 将开放性括号添加到open_stack ，将star添加到star_stack
            if char == "(":
                open_stack.append(i)
            elif char == "*":
                star_stack.append(i)
                
            # 检查当前打开括号或星号，如果它们匹配关闭括号，则弹出它们
            # 如果找不到匹配的括号，那么表达式就无效。
            elif char == ")":
                if open_stack:
                    open_stack.pop()
                elif star_stack:
                    star_stack.pop()
                else:
                    return False

        # 检查剩余堆栈的长度
        while open_stack and star_stack:
            o = open_stack.pop()
            s = star_stack.pop()

            if o > s:
                return False

        return len(open_stack) == 0