0
点赞
收藏
分享

微信扫一扫

栈的应用(括号的匹配问题)【leetcode刷题】

今天来看一道题,有关栈的应用。

可以先去自己尝试做一下这题
题目地址戳我

题目

根据题目可能有些人会想到数括号的个数来匹配,但这这样忽略了一个问题,诸如 ‘([])’ 就是不满足题目要求,但是个数是满足的

因此我们考虑用栈 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;

}
举报

相关推荐

0 条评论