/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @return bool布尔型
 */
 #define Max_Size 10000
 typedef struct Stack{
    char ch[Max_Size];
    int top;
 }Stack_;
bool isValid(char* s ) {
    // write code here
    Stack_* S = (Stack_*)malloc(sizeof(Stack_));//创建一个栈
    S->top = 0; //将要加入元素位置的下标
    int i = 0;
    while(s[i]){
        if(s[i] == '(' || s[i] == '{' || s[i] == '['){
            //如果是左括号们就入栈
            if(S->top < Max_Size){
            S->ch[S->top++] = s[i];
            }
            else{
                //栈已满
                return false;
            }
        }
        else if(s[i] == ')'){//如果是右括号就出栈并进行比较合法性
            if(S->top <= 0 ||S->ch[--(S->top)] != '('){
           
                return false;//不匹配
            }
        }
        else if(s[i] == '}'){//如果是右括号就出栈并进行比较合法性
            if(S->top <= 0 ||S->ch[--(S->top)] != '{'){
               
                return false;//不匹配
            }
        }
        else if(s[i] == ']'){//如果是右括号就出栈并进行比较合法性
            if(S->top <= 0 ||S->ch[--(S->top)] != '['){
                
                return false;//不匹配
            }
        }
        i++;
    }
    //都比较完了如果栈里还剩元素就说明不合法
    if(S->top != 0){
        return false;
    }
    return true;
}