消消乐做法,能配对,则消除

//检查配对的函数
char check(char pre){
    if(pre==')'){
        return '(';
    }
    if(pre=='}'){
        return '{';
    }
    if(pre==']'){
        return '[';
    }
    return 0;
}

bool isValid(char* s ) {
	//只要能成功配对,则字符串长度必为偶数
    if(strlen(s)%2!=0){
        return 0;
    }
    //初始化一个字符串数组做栈
    char* stack;
    int top=0;
    stack=(char*)malloc(sizeof(char)*strlen(s));
    //遍历字符串s
    for(int i=0;i<strlen(s);i++){
        //如果是左括号,则入栈
        if(s[i]=='('||s[i]=='{'||s[i]=='['){
            stack[top++]=s[i];
        }
        //如果是右括号
        if(s[i]==')'||s[i]=='}'||s[i]==']'){
            //如果栈还是空,则说明配对错误,还没有左括号就有了右括号
            if(top<1){
                return 0;
            }
            //检查当前右括号与已经入栈的前一个字符能否配对
            if(stack[top-1]==check(s[i])){
                //如果能配对,则将配对的左括号消除,字符数组栈同样的位置置空
                stack[--top]='\0';
            }
        }
    }
    //整个s遍历结束后,如果栈中还有元素,说明有没配对的字符,返回0
    if(strlen(stack)!=0){
        return 0;
    }else{//如果栈空,说明都配对成功
        return 1;
    }
}