Java代码解决括号匹配问题

14 篇文章 1 订阅
9 篇文章 0 订阅

        一看到括号匹配问题,我便想到了栈的先进后出原则。我希望以后你们看到各种各样的问题之后,脑袋中也能冒出一些想法,这种想法的来源是取决于你对知识点的熟悉程度,所以我们一定要把知识点记牢。

        下面是我的实现代码及测试结果:

        实现代码:

package practice;

import java.util.Stack;

/**
 * 括号匹配问题
 */
public class Kuohaopipei {

    static boolean result = true;

    public static void main(String[] args) {
        System.out.println("测试结果为:"+check("({.})[1]{a}([z])"));
    }

    /**
     * 定义一个检测括号是否配对的方法
     * @param str
     * @return
     */
    public static boolean check(String str){
        //利用栈的先进后出规则
        Stack<Character> stack = new Stack<>();
        //将字符串转换为数组
        char[] c = str.toCharArray();
        for (int i = 0; i < c.length; i++) {
            //判断字符是否为{[(,如果是则入栈
            if ('{' == c[i] || '[' == c[i] || '(' == c[i]){
                stack.push(c[i]);
            }
            //判断字符是否为},如果是则取栈顶元素进行匹配
            peiDui(c[i],stack,'{','}');
            //判断字符是否为],如果是则取栈顶元素进行匹配
            peiDui(c[i],stack,'[',']');
            //判断字符是否为),如果是则取栈顶元素进行匹配
            peiDui(c[i],stack,'(',')');
        }
        return result;
    }

    /**
     * 配对消除对应括号的方法
     * @param c
     * @param stack
     * @param begin
     * @param end
     */
    public static void peiDui(char c, Stack<Character> stack, char begin, char end){
        if(end == c){
            //判断栈是否为空
            if(!stack.isEmpty()){
                if(stack.pop() != begin){
                    result = false;
                }
            }else {
                result = false;
            }
        }
    }
}

        测试结果:

        我个人觉得我的代码不够简洁,如果你有更好的方法可以在评论区与我交流讨论,让我们相互学习、相互成长吧! 

        如果你对QQ音乐的制作感兴趣可以点击:(34条消息) (优化版)简易版QQ音乐改进版(HTML+CSS+JQuery)_有没有料,进来看看就知道!-CSDN博客

        制作简单,我在博客中附上了制作的详细步骤,如果有需要,也可以向我要源码,只要联系我,我就会一一回复的。

        还有一个就是狂拍灰太狼的制作,这是一个小游戏,想了解可以点击:(34条消息) 每个人都能制作的简易版狂拍灰太狼小游戏(HTML+CSS+JavaScript)_有没有料,进来看看就知道!-CSDN博客

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

欲戴王冠♛必承其重

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

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

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

打赏作者

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

抵扣说明:

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

余额充值