【数据结构练习题】栈——1.括号匹配 2.逆波兰表达式求值 3.出栈入栈次序匹配 4.最小栈

在这里插入图片描述
♥♥♥♥♥个人主页♥♥♥♥♥
♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥

前言

在学习数据结构的过程中遇到了各种各样类型的题目,我在解答这些题目的时候收获了不少,所以我想开设一个专栏来分享我平时做题的收获,在我分享的题中我采用三步法来阐述,希望大家可以在我的文章有收获,并且能够在评论区中积极讨论更多的解题方法。

1.括号匹配

1.1问题描述

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号

1.2解题思路

大主题:我们先遍历这个字符串,在遇到左括号就进行压栈,遇到右括号则出栈并与左括号匹配,在这会出现两种情况:
1.如果不匹配,则直接返回false。
2.如果匹配,则可以继续去遍历这个字符串。
特殊情况:
1.当遍历完字符串,发现栈中还有元素,则可以直接返回false。
2.当栈中的元素已经全部被弹出,发现字符串没有被遍历完,也直接返回false。

1.3画图解释

1.大主题:
在这里插入图片描述
2.特殊情况:
在这里插入图片描述

1.4代码实现

public class ParenMatch {
   
    Stack<Character> stack = new Stack<>();
    public boolean isValid(String str) {
   
        //1.遍历这个数组
        for (int i = 0; i < str.length(); i++) {
   
            //2.判断是左括号还是右括号
            char ch = str.charAt(i);
            //2.1左括号
            if(ch == '(' || ch == '[' || ch == '{' ) {
   
                //压栈
                stack.push(ch);
            }
            //2.2右括号 看栈中是否为空,为空直接返回flase 不为空判断左右括号是否匹配。
             else {
   
                //2.2.1栈中不为空
                if(!stack.empty()) {
   
                    char ch1 = stack.peek();//ch1是左括号。
                    //判断括号是否匹配
                    if(ch == ')' && ch1 == '(' || ch == ']' && ch1 == '[' || ch == '}' && ch1 == '{') {
   
                        stack.pop();
                    }
                    else {
   
                        return false;
                    }
                }
                //2.2.2栈中为空
                else {
   
                    return false;
                }
            }
        }
        //当数组遍历完之后,判断栈中是否空。
        return stack.empty();
    }

    pu
  • 101
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 87
    评论
评论 87
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

《冰美式与三明治》

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值