括号配对问题-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");
        }
    }
}

 

posted @ 2019-04-25 22:26  给我一个团队,干翻TX  阅读(394)  评论(0编辑  收藏  举报