利用栈实现括号匹配问题

1、问题描述

给出一个仅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’]',的字符串,判断给出的字符串是否是合法的括号序列。
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。

2、解题思路

借助辅助栈——左括号入栈
1、当遍历遇到字符左括号: ‘(’、 ‘[’ 或 ‘{’ 时,将左括号入栈;
2、当遍历遇到字符右括号 :‘)’ 、‘[’ 或 ‘}’ 时,则判断该字符是否与当前的栈顶元素相同:如果不同则直接返回false,终止遍历;如果相同则将当前的栈顶元素出栈。
3、当遍历结束时,判断栈是否为空:如果栈空则表示括号序列合法;否则表示括号序列不合法。

3、图解

在这里插入图片描述

4、代码实现

 /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        Stack<Character> st = new Stack<>();
        //System.out.println(s.length());
         for(int i = 0; i < s.length(); i++){
             char x = s.charAt(i);
             //遇见左括号进栈
             if(x == '(' || x == '[' || x == '{'){
                 st.push(x);
                 System.out.println(x + "进栈");
             }
             
            //遇见右括号判断栈空和栈顶元素是否与此右括号匹配
             else if(!st.empty() && ((x == ')' && '(' == st.peek()) 
                              || (x == ']' && '[' == st.peek())
                              || (x == '}' && '{' == st.peek()))){
                 //如果匹配则出栈
                 st.pop();
                 System.out.println(x + "出栈");
             }
             //不匹配则直接终止遍历,返回false
             else
                 return false;
         } 
        //最后如果栈空则表示匹配
         return st.empty();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值