java左右括号

java左右括号

最近看到有小伙伴去面试,被人问起一道算法题,题目内容大概是:给定一个字符串,如:"[[]]{}",判断字符串是否为有效的括号。考查的是数据结构,下面用的是java的栈实现左右括号的校验。

数据结构-栈

栈的特点:先进后出

代码实现

java 复制代码
public static void main(String[] args) {
        input("([)]");
        input("}}");
        input("[[]]{}");
    }

    private static void input(String str) {
        boolean valid = valid(str);
        System.out.println(str + ": " + valid);
    }

	 /**
     * 校验指定的字符串是否匹配
     *
     * @param str 校验的字符串
     * @return true:匹配;false:不匹配
     */
    private static boolean valid(String str) {
        char[] chars = str.toCharArray();
        Stack<Character> charsStack = new Stack<>();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == '(' || chars[i] == '[' || chars[i] == '{') {
                //1. 左括号,则入栈
                charsStack.push(chars[i]);
            } else {
                //2. 右括号,则出栈比较
                if (charsStack.size() == 0) {
                    //2.1 字符串不为空,但是栈无数据,即没有对应的左括号入栈,则不匹配
                    return false;
                }

                //2.2 出栈的数据是否成对括号
                char pop = charsStack.pop();
                if (pop == '(' && chars[i] != ')') {
                    return false;
                } else if (pop == '[' && chars[i] != ']') {
                    return false;
                } else if (pop == '{' && chars[i] != '}') {
                    return false;
                }
            }
        }
        //3. 出栈后的栈为空,则说明是成对出现,则匹配
        return charsStack.isEmpty();
    }

上述的代码,仅供参考!

相关推荐
郝学胜-神的一滴6 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
JH30737 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble9 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟9 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖9 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_124987075310 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.10 小时前
Day06——权限认证-项目集成
java
瑶山10 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard