消消乐做法,能配对,则消除
//检查配对的函数
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;
}
}