判断多个括号是否闭合

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

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
经验分享 程序员 微信小程序 职场和发展