20. 有效的括号(Java)

题目描述:

给定一个只包括 '(',')','{','}','','' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。

2.左括号必须以正确的顺序闭合。

3.每个右括号都有一个对应的相同类型的左括号。

输入:

s = "()\[\]{}"

输出:

true

代码实现:

java 复制代码
public class Main{
    public static void main(String[] args) {
        String s = "[()](())";
        System.out.println(isValid(s));//true
    }

    public static boolean isValid(String s) {
        Stack<Character> stack1 = new Stack<>();//存入栈元素
        Stack<Character> stack2 = new Stack<>();//存出栈元素
        for (int i = 0; i < s.length(); i++) {
            stack1.push(s.charAt(i));//将字符串的元素依次压入栈中
        }
        //依次出栈进行匹配 (),[],{}
        while (!stack1.isEmpty()) {
            //若栈2为空,则取栈1 栈顶元素压入
            if (stack2.isEmpty()) {
                stack2.push(stack1.pop());//将从栈1出栈的元素存入栈2
            }
            //若栈1为空,则直接跳出循环,防止空栈异常
            if (stack1.isEmpty()) {
                break;
            }
            Character c1 = stack1.peek();//获取stack1栈顶元素
            Character c2 = stack2.peek();//获取stack2栈顶元素
            //将两栈顶元素进行匹配
            if ((c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']') || (c1 == '{' && c2 == '}')) {
                //若匹配成功,两栈顶元素均出栈
                stack1.pop();
                stack2.pop();
            } else {
                //如果不匹配,栈1栈顶元素出栈 并压入栈2
                stack2.push(stack1.pop());
            }
        }
        //判断栈2是否为空:若为空,则字符串全部匹配
        return stack2.isEmpty();
    }
}
相关推荐
“AI国潮设计-小江”37 分钟前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人44 分钟前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
sunshine22 girl1 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs1 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang2 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl2 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat2 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
菜鸟~noob2333 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
惊讶的猫4 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_4 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython