[規格9012]括弧-JAVA


問題のソース


https://www.acmicpc.net/problem/9012

に答える

  • カッコの問題には、通常、スタックを使用する多くの解答があります.
  • この問題は、スタックに「(」,「)」を入れて、次のように解くこともできます.
    1.括弧文字列の最初の文字が「)」の場合、「NO」
  • (文字の場合push()
  • )
  • スタックのtopが「(」の場合、次の文字が「)」の場合、pop()
  • 最終スタックが空の場合は、正しいカッコ文字列です.

    コード#コード#

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Stack;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            int N = Integer.parseInt(stringTokenizer.nextToken());
            for (int i = 0; i < N; i++) {
                stringTokenizer = new StringTokenizer(bufferedReader.readLine());
                String vps = stringTokenizer.nextToken();
                Stack<Character> stack = new Stack<>();
                char[] vpsToCharArray = vps.toCharArray();
                if (vpsToCharArray[0] == ')') {
                    System.out.println("NO");
                    continue;
                }
                for (char ch : vpsToCharArray) {
                    if (stack.isEmpty()) {
                        stack.push(ch);
                        continue;
                    }
                    if (ch == '(') {
                        stack.push(ch);
                    } else {
                        if (stack.peek() == '(') {
                            stack.pop();
                        }
                    }
                }
                System.out.println(stack.isEmpty() ? "YES" : "NO");
            }
        }
    }

    採点結果