/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @return bool布尔型
 */
typedef struct {
    char a[10000];
    char *top,*bottom;
}arr;
void PUT(arr *a,char* s){//入栈
    if(a->top==NULL){
        a->a[0]=*s;
        a->bottom=a->top=a->a;
    }else{
        *(++a->top)=*s;
    }
}
void EXIT(arr *a){//出栈
    if(a->top==a->bottom){
        a->top=a->bottom=NULL;
    }else{
        a->top--;
    }

}
bool isValid(char* s ) {
    // write code here
    arr a={{0},NULL,NULL};
    if(*s=='{'||*s=='('||*s=='[')
    while(*s){
        if(*s=='{'||*s=='('||*s=='['){
            PUT(&a,s);
        }else if(*s==']'||*s==')'||*s=='}'){
            if(a.top!=NULL&&((*(a.top)=='{'&&*s=='}')||(*(a.top)=='['&&*s==']')||(*(a.top)=='('&&*s==')'))){
                EXIT(&a);
            }else {
             return false;
            }
        }
        s++;
    }
    if(!(*s)&&a.top==NULL){
        return true;
    }
    return false;
}