给定一个数组(只包含括号()、{}、【】),让你判断括号之间是否一一对应
解题思路:
利用栈的先进后出的性质,若为‘(’、‘【’、‘{’,则将该元素入栈,若为‘)’、‘】’、‘}’则先判断栈顶元素是否与该元素对应(需要一个cheak函数,将如‘)’等右半部分元素返回成左半部分元素,便于判断),若对应,则将左半部分出栈,不对应,结束。
代码:
char cheak (char pre) //判断左右是否对称
{
if(pre == ')') return '(';
if(pre == ']') return '[';
if(pre == '}') return '{';
return 0;
}
bool isValid(char* s ) {
if(strlen(s)%2 == 1) return 0;
char *stack;
int top=0;
stack=(char *)malloc (sizeof(char)*strlen(s)); //动态开辟空间
int i=0;
for(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] == cheak(s[i]))
stack[--top]='\0'; //出栈
}
}
if(strlen(stack) != 0) //栈空返回1,否则返回0
return 0;
else return 1;