方法:
bool isValid(char * s){
Stack st;
StackInit(&st);
while(*s)
{
//左括号入栈
if(*s == '(' || *s == '[' || *s == '{')
{
StackPush(&st, *s);
}
//右括号出栈
else
{
//右括号前没有左括号
if(StackEmpty(&st))
{
StackDestroy(&st);
return false;
}
char tmp = StackTop(&st);
StackPop(&st);
//不相等则false
if(tmp == '(' && *s != ')'
|| tmp == '[' && *s != ']'
|| tmp == '{' && *s != '}')
{
StackDestroy(&st);
return false;
}
}
s++;
}
//如果栈不为空,则左右括号数量不一致
if(!StackEmpty(&st))
{
StackDestroy(&st);
return false;
}
StackDestroy(&st);
return true;
}
思路:
该题是给一个由左右括号组成的字符串,从左向右判断左右括号是否对应。解题思路是:如果左右括号对应,那么遍历字符串,将左括号入栈。当遇到右括号时,将字符出栈,与右括号一一比对。如果出现不对应的情况就返回false。
需要注意的是,有可能只有左括号或者右括号的情况,要判断栈是不是空来解决左右括号数量不对应或者只有右括号的情况。