数据结构(java)之栈的应用---括号匹配问题

括号匹配问题
利用栈的先进后出的特性,从左往右扫描字符串,如果遇到的是左括号即:‘{’,‘[’,‘(’,则入栈,如果遇到的是右括号即:‘)’,’]’,’}’,则取出栈顶元素,与当前字符串中遇到的括号进行比较,如果匹配,则栈顶元素出栈,继续扫描字符串,循环执行上述操作,如果到最后扫描字符串中的括号匹配完成,则检查此时栈是否已为空,如果为空,则括号完全匹配,如果不为空,则括号不匹配。如果扫描字符串中途遇到不匹配,则括号不匹配。

import java.util.Stack;

public class Solution {
    public boolean isValid(String s){
        Stack<Character> stack = new Stack<>();
        for (int i=0;i<s.length();i++){    //扫描传入的字符串
            char c = s.charAt(i);
            if (c=='{'||c=='{'||c=='(') //如果扫描到的是左括号,则入栈
                stack.push(c);
            else  //如果扫描到的不是左括号,则进行如下判断
                if (stack.isEmpty()) //如果扫描到当前左括号前,栈内已为空,则不匹配
                    return false;
                char topChar = stack.pop(); //将当前字符串中取到的括号与栈顶元素比较
                if (c=='}' && topChar!='{')
                    return false;
                if (c==']' && topChar!='[')
                    return false;
                if (c==')' && topChar!='(')
                    return false;
        }
        //如果到最后传入字符串中的括号与栈内的括号匹配完成,且栈内正好为空,则匹配正确;
        // 如果栈内不空,则匹配不正确
        return stack.isEmpty();
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值