判断多个括号是否闭合

给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’,的字符串,判断字符串是否有效。有效字符串满足:

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

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

利用栈算法可以很好的解决这个问题,下面是我写的代码:

import java.util.LinkedList;

public class Demo {
    static public boolean action(String s) {
        LinkedList<Character> queue = new LinkedList<Character>();
        char ch[] = s.toCharArray();
        for (int i = 0, length = ch.length; i < length; i++) {
            char a = ch[i];
            if (a == '{' || a == '(' || a == '[') {
                queue.push(a);// 压入栈
            } else {
                if (queue.size() == 0) {// 如果栈是空的
                    return false;
                }
                char b = 0;
                switch (a) {
                case '}':
                    b = '{';
                    break;
                case ')':
                    b = '(';
                    break;
                case ']':
                    b = '[';
                    break;
                default:
                    return false;
                }
                Character top = queue.poll();// 弹出栈顶值
                if (top != b) {
                    return false;
                }
            }
        }
        return queue.size() == 0;
    }

    public static void main(String[] args) {
        System.out.println(action("{()[][{()}][]}"));
    }
}

这段代码针对不同字符串的结果如下表:

字符串结果
{}true
()[]{}true
{()[][{()}][]}

true

{)false
{(])}false
{(}[)]false
(false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值