/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @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;
}