java括号匹配算法求解(用栈实现)

Java括号匹配算法求解(用栈实现)

什么是括号匹配?

在计算机科学中,括号匹配是指验证一个表达式中的括号是否是成对出现、嵌套正确的。例如:()[]{}{}是一个合法的括号序列,而([)]则是不合法的括号序列。

如何检查括号匹配?

使用栈数据结构可以很容易地完成括号匹配的检查。 遍历字符串中的每个字符,如果遇到左括号则入栈,如果遇到右括号则出栈,出栈的同时判断是否与当前右括号匹配。如果栈为空,说明左右括号不匹配,如果最后栈不为空,也说明左右括号不匹配,否则左右括号匹配。

Java代码

public static boolean checkBracket(String s) {
    Stack<Character> stack = new Stack<>();
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if (ch == '(' || ch == '[' || ch == '{') {//左括号入栈
            stack.push(ch);
        } else if (ch == ')' || ch == ']' || ch == '}') {//右括号出栈,判断和左括号是否匹配
            if (stack.isEmpty()) {
                return false;
            }
            char top = stack.pop();
            if (ch == ')' && top != '(') {
                return false;
            }
            if (ch == ']' && top != '[') {
                return false;
            }
            if (ch == '}' && top != '{') {
                return false;
            }
        }
    }
    return stack.isEmpty();//最后判断栈是否为空
}

示例说明

下面给出两个示例说明。

示例1

输入:()[{}][]

输出:true

解释:左右括号都匹配,合法括号序列。

示例2

输入:()[]{}}

输出:false

解释:左右括号不匹配,不合法括号序列。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java括号匹配算法求解(用栈实现) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Hibernate中获取Session的两种方式代码示例

    获取 Hibernate 中的 Session 可以通过两种方式:getCurrentSession() 和 openSession()。 getCurrentSession() 方法 getCurrentSession() 方法获取的 Session 是与当前线程绑定的,使用完后会自动关闭。 示例代码如下: Session session = sessio…

    Java 2023年5月31日
    00
  • SpringBoot3集成SLF4J+logback进行日志记录的实现

    下面就为大家讲解一下“SpringBoot3集成SLF4J+logback进行日志记录的实现”的完整攻略。 1. 引入相关依赖 在SpringBoot的pom.xml文件中添加SLF4J和logback的依赖: <dependency> <groupId>org.springframework.boot</groupId>…

    Java 2023年5月26日
    00
  • Java 完美判断中文字符的方法

    Java 完美判断中文字符的方法 在Java程序中,经常需要对中文字符进行操作,例如输入、输出、比较、查找等等。因此如何正确判断中文字符就显得非常重要。下面将介绍一些常见的方法。 方法一:使用正则表达式 正则表达式可以用来判断一个字符串是否为中文字符。可以使用Unicode编码来匹配中文字符。 以下是一个示例代码: public static boolean…

    Java 2023年5月27日
    00
  • Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228)

    首先我们来简单介绍一下这个漏洞。 Apache log4j2是一款Java日志框架,它可以帮助开发者进行应用程序日志的记录和管理。CVE-2021-44228是Apache log4j2存在的一种远程代码执行漏洞,攻击者通过恶意构造log4j格式的请求,可以在服务器上执行任意代码,从而造成严重后果。 下面我们来具体讲解一下如何复现这个漏洞,并提供修复建议。 …

    Java 2023年6月2日
    00
  • Java 实现加密数据库连接的步骤

    Java 实现加密数据库连接一般可以通过以下步骤来完成: 1. 获取加密证书 获取一个数字证书(也称为数字信任证书、数字 ID 或代码签名证书),以确保使用加密连接时建立的通信是受信任的。可以通过向受信任的证书颁发机构购买一个证书或进行自签名认证来获得数字证书。 2. 将证书添加到 Java 密钥库 将数字证书添加到 Java 密钥库,以确保可以在客户端上验…

    Java 2023年5月19日
    00
  • Spring Boot配置接口WebMvcConfigurer的实现

    下面是关于“Spring Boot配置接口WebMvcConfigurer的实现”的完整攻略,包含两个示例说明。 Spring Boot配置接口WebMvcConfigurer的实现 Spring Boot提供了许多配置选项来自定义应用程序的行为。其中,WebMvcConfigurer接口提供了许多配置选项来自定义Spring MVC的行为。本文将介绍如何实…

    Java 2023年5月17日
    00
  • Spring MVC的文件上传和下载以及拦截器的使用实例

    下面我将为您详细讲解“Spring MVC的文件上传和下载以及拦截器的使用实例”的完整攻略。 文件上传 准备工作 在Spring MVC中,文件上传使用MultipartResolver来解析multipart请求。一般情况下,我们可以使用Spring提供的CommonsMultipartResolver来完成解析。 需要在Spring的配置文件中进行以下配…

    Java 2023年6月15日
    00
  • JavaI/O深入学习之输入和输出

    Java I/O深入学习之输入和输出攻略 Java I/O(Input/Output)是 Java 语言标准库的一部分,被设计为灵活和通用的系统,用于读取和写入各种不同类型的数据,包括文件和网络连接等。本文将深入探讨 Java I/O 的输入输出流,包括常见的字节流和字符流及其使用方法。 字节流和字符流 Java I/O 基本上可以分为两种类型: 字节流和字…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部