南阳ACM 括号匹配 JAVA

原创 2016年08月30日 16:39:54
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static class BracketStack {
        List<Character> s;
        int top;

        BracketStack() {
            top = -1;
            s = new LinkedList<Character>();
        }

        public void pop() {
            s.remove(top--);
        }
        
        public void clear(){
            s.clear();
        }

        public boolean push(char element) {
            if (top < 0) {
                s.add(element);
                top++;
                return true;
            } else {
                char topChar = s.get(top);
                if (element == ']' || element == ')') {
                    if (topChar + 1 == element || topChar + 2 == element) {
                        pop();
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    s.add(element);
                    top++;
                    return true;
                }
            }
        }

        public boolean isEmpty() {
            return top == -1 ? true : false;
        }
    }

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int size = Integer.parseInt(cin.nextLine());
        List<Boolean> flags = new ArrayList<Boolean>();
        BracketStack bs = null;
        int j=0;
        while (j++ <size) {
            String input = cin.nextLine();
            int length = input.length();
            bs = new BracketStack();
            for (int i = 0; i < length; i++) {
                if (!bs.push(input.charAt(i))) {
                    break;
                }
            }

            if (bs.isEmpty()) {
                flags.add(true);
            }else{
                flags.add(false);
            }
        }
        for (int i = 0; i < flags.size(); i++) {
            System.out.print(flags.get(i) ? "Yes" : "No");
            if (i + 1 == flags.size())
                continue;
            System.out.print("\n");
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

南阳oj 第15题 括号匹配(二)

括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述给你一个字符串,里面只包含"(",")","[","]"四种符...

南阳理工ACM 题目2 括号配对问题

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3      描述 现在,有一行括号序列,请你检查这行括号是否配对。      输入 第一行...

南阳理工--ACM--括号配对

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(...

南阳理工acm括号配对问题

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出每组输入数据的...

南阳理工OJ15-括号匹配(2)

描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。 如: []是匹配的 ([])[]是匹配的 ((]是不匹配的 ([)]是不匹...
  • e_one
  • e_one
  • 2016-04-26 12:53
  • 5135

acm 括号匹配

[ACM] 携程预赛第一场 括号匹配 (动态规划)

括号匹配 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis...

ACM训练题(关于括号匹配问题)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出每组输入数据的...

ACM 括号匹配

括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这...

Contest1002 - HHU ACM 综合训练1 E题 Mouse and Parenthesis(线段树+括号匹配)

题意:给定一个平衡序列(即左右括号完全匹配),询问其中两个位置的括号进行交换后是否仍为平衡序列 思路:看到题目完全想不到用线段树做(微笑)。 首先终于学会了判断括号匹配的方法:(为1,)为-1,依次相...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)