今天来看一道题,有关栈的应用。
可以先去自己尝试做一下这题
题目地址戳我
根据题目可能有些人会想到数括号的个数来匹配,但这这样忽略了一个问题,诸如 ‘([])’ 就是不满足题目要求,但是个数是满足的
因此我们考虑用栈 LIFO(Last In First Out) 的特点,来进行括号的匹配
思路:
创建一个栈,若为 == “[ { ( " == 则进行入栈, 若为 == “] } ) ” ==
则让此时栈中元素出栈进行匹配,看是否相同,若不同则直接返回false
bool isValid(char * s){
Stack st; //因为是C语言,栈是用自己实现的栈然后ctrl c v
StackInit(&st);
while(*s){
if(*s == '(' || *s == '[' || *s =='{'){
StackPush(&st,*s);//入栈
s++;
}
else{
if(StackEmpty(&st)){ //若此时栈中没有元素 说明有单个的] } ) 直接返回false
return false;
}
char top = StackTop(&st);
StackPop(&st);
if( (*s == '}'&& top != '{') || (*s == ']'&& top != '[' ) ||(*s == ')'&& top != '(' )){
return false;
}
s++;
}
}
bool ret = StackEmpty(&st); //若只有 [ { ( 则此时栈中仍有元素 应返回false
return ret;
}