• 括号配对问题-java:Stack


    题目描述:

    现在,有一行括号序列,请你检查这行括号是否配对。

    输入描述:

    第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),
    测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符

    输出描述:

    每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

    样例输入:

    3
    [(])
    (])
    ([[]()])

    样例输出:

    No
    No
    Yes

    解题思想:就是用一个stack,称为栈类。遇到左括号就压栈,否则,将这个元素与栈顶元素比较,如果相等,则消去栈顶元素。否则,不匹配。
    我写完就提交了,没想到超时,需要做些判断条件。
    代码实现如下:
    package Combat.com;
    
    import java.util.Enumeration;
    import java.util.Scanner;
    import java.util.Stack;
    
    public class Main
    {
        public static void main(String []args)
        {
            Scanner cin = new Scanner(System.in);
            int N = cin.nextInt();
            for(int i = 0; i < N; i++)
            {
                String str = cin.next();
                AchieceStack(str);
            }
        }
        static void AchieceStack(String str)
        {
            if(str.charAt(0) == ']' || str.charAt(0) == ')')//第一个就出现不匹配
            {
                System.out.println("No");
                return;
            }
            Stack stack = new Stack();
            int len = str.length();
            stack.push(str.charAt(0));
            for(int i = 1; i < len; i++)
            {
                if(str.charAt(i) == '[' || str.charAt(i) == '(')//左括号压栈
                {
                    stack.push(str.charAt(i));
                }
                else//右括号判断
                {
                    if(stack.empty() || stack.size() > len-i)//特殊判断条件。
                    {
                        System.out.println("No");
                        return;
                    }
                    char c = (char) stack.peek();
                    if(c == '[' && str.charAt(i) == ']')
                    {
                        stack.pop();
                    }
                    else if(str.charAt(i) == ')' && c == '(')
                    {
                        stack.pop();
                    }
                    else
                    {
                        System.out.println("No");
                        return;
                    }
                }
                /*Enumeration items=stack.elements();//这部分代码用来检验的,很重要
                //显示枚举(stack)中的所有元素
                while(items.hasMoreElements())
                {
                    System.out.print(items.nextElement()+"");
                }
                System.out.println();*/
            }
            if(!stack.empty())
            {
                System.out.println("No");
            }
            else
            {
                System.out.println("Yes");
            }
        }
    }
  • 相关阅读:
    PythonStudy——greenlet 协程
    PythonStudy——事件 Event
    PythonStudy——单线程并发的实现
    2015年的总结
    kylin一种OLAP的实现
    分布式消息队列的使用kakfa
    第一次听到了docker
    Hive分布式的数据仓库
    dubbo服务框架学习
    Storm实时计算框架的编程模式
  • 原文地址:https://www.cnblogs.com/674001396long/p/10771523.html
Copyright © 2020-2023  润新知