问题 C: 括号匹配-CSDN博客

57 阅读1分钟

题目描述
问题很简单你只需要回答给定的字符串(只含有小括号)是否合法
如果合法输出"YES",否则输出"NO"(不含括号)
输入
多组输入测试
第一行输入一个整数n(1<=n<=10)
接下来n行每行都输入一个字符串(字符串长度不会超过100)
输出
输出n行代表每行的括号是否合法"YES"or"NO"
样例输入
5
((((((()))))))
()()()()())(()((
()(()((()()())())()
((())()()()())())
()()()()()(())
样例输出
YES
NO
NO
NO
YES

package com.vector.test;


import java.util.Scanner;
import java.util.Stack;

public class Main {
    /**
     * 括号匹配
     */
    static Stack<Character> stack = new Stack<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = n; i > 0; i--) {
            String s = zifu(sc.next()) ? "YES" : "NO";
            System.out.println(s);
            stack.clear();
        }
    }

    public static boolean zifu(String str) {

        for (int i = 0; i < str.length(); i++) {
            switch (str.charAt(i)) {
                case '(':
                    stack.push(str.charAt(i));
                    break;
                case ')':
                    if (stack.isEmpty()) {
                        return false;
                    } else {
                        stack.pop();
                    }
            }
        }
        if (!stack.isEmpty()) {
            return false;
        }
        return true;
    }
}