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