- 注意事项
1、c不能识别bool类型,要加上#include<stdbool.h>
2、当输入为奇数时,不可能会匹配成功
3、❗记得考虑全是左括号的情况(假如不加if(pos>0) return false;
就会直接返回true)
4、考虑最左边就是右括号,最终无法匹配上,所以要加上if(pos==0) return false;
代码
// An highlighted block
#include<stdbool.h>//bool:true\false
char is(char ch){
if(ch==')') return '(';
if(ch==']') return '[';
if(ch=='}') return '{';
else return false;
}
bool isValid(char * s){
if(strlen(s)%2==1){ //奇数说明不可能配对
return false;
}
int pos=0;
char *Arr=(char*)malloc(strlen(s)*sizeof(char));
for(int i=0;i<strlen(s);i++){
char ch=s[i];
if(ch=='{'||ch=='('||ch=='['){
Arr[pos++]=ch;
}
if(ch=='}'||ch==')'||ch==']'){
if(pos==0) return false; //最左边是右括号
if(is(ch)==Arr[pos-1]){
pos--; //pop出栈
}
else return false;
}
}
if(pos>0) return false; //剩余左括号
return true;
}