/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
typedef struct CharStack{
int top;
char data[10001];
}*CharStackPtr;
/**
*初始化一个空栈
*/
CharStackPtr charStackInit(){
CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(struct CharStack));
resultPtr->top = -1;
return resultPtr;
}//of charStackInit
/**
*压栈
*/
void push(CharStackPtr paraStackPtr, int paraValue){
paraStackPtr->top ++;
paraStackPtr->data[paraStackPtr->top] = paraValue;
}//of push
/**
弹栈
*/
char pop(CharStackPtr paraStackPtr){
paraStackPtr->top --;
return paraStackPtr->data[paraStackPtr->top + 1];
}//of pop
/**
*括号匹配
*/
bool isValid(char* s ) {
// write code here
int len = strlen(s);
//step 1. 初始化栈并将‘#’作为基础
CharStackPtr tempStack = charStackInit();
push(tempStack, '#');
char tempChar, tempPopedChar;
//step 2. process the string
for(int i = 0; i < len; i ++){
tempChar = s[i];
switch(tempChar){
case '(':
case '[':
case '{':
push(tempStack, tempChar);
break;
case ')':
tempPopedChar = pop(tempStack);
if(tempPopedChar != '('){
return false;
}//of if
break;
case ']':
tempPopedChar = pop(tempStack);
if(tempPopedChar != '['){
return false;
}//of if
break;
case '}':
tempPopedChar = pop(tempStack);
if(tempPopedChar != '{'){
return false;
}//of if
break;
default:
break;
}//of switch
}//of for i
tempPopedChar = pop(tempStack);
if (tempPopedChar != '#'){
return false;
}//of if
return true;
}