Есть ли у каждой открывающей скобки закрывающая?

Рейтинг: 1Ответов: 1Опубликовано: 07.03.2015

Есть 3 строки вида

(()) ))(( (()))

Задача: выдать, имеет ли каждая открывающая скобочка соответствующую закрывающуюся:

( - false () - true ()) - false )( - false (())() - true

Мое решение:

public static void main(String[] args) {
        String str1 = "(())";
        String str2 = "))((";
        String str3 = "(()))";

 System.out.println("String (())");
 System.out.println();
    for (int i = 0; i < str1.length(); i++) {

        if ((str1.charAt(i) == '(')&& (str1.indexOf(')') > str1.indexOf('('))) {
            System.out.println("str1.charAt("+ i+ ")" + str1.charAt(i) + " true ");
        } else {System.out.println("str1.charAt("+ i+ ")" + str1.charAt(i)
                    + " false ");
        }}
  System.out.println("String ))((");
  System.out.println();
    for (int i = 0; i < str2.length(); i++) {

        if ((str2.charAt(i) == '(')&& (str2.indexOf(')') > str2.indexOf('('))) {
            System.out.println("str1.charAt("+ i+ ")" + str1.charAt(i) + " true ");
        } else {
            System.out.println("str1.charAt("+ i+ ")" + str2.charAt(i)+ " false ");
        }}

    System.out.println("String (()))");
    System.out.println();
    for (int i = 0; i < str3.length(); i++) {

        if ((str3.charAt(i) == '(')&& (str3.indexOf(')') > str3.indexOf('('))) {
            System.out.println("str1.charAt("+ i+ ")" + str1.charAt(i) + " true
");
        } else {
            System.out.println("str1.charAt("+ i+ ")" + str3.charAt(i)+ " false ");
        }}}}

Ответ соответственно:

String (())

str1.charAt(0)( true 
str1.charAt(1)( true 
str1.charAt(2)) false 
str1.charAt(3)) false 
String ))((

str1.charAt(0)) false 
str1.charAt(1)) false 
str1.charAt(2)( false 
str1.charAt(3)( false 
String (()))

str1.charAt(0)( true 
str1.charAt(1)( true 
str1.charAt(2)) false 
str1.charAt(3)) false 
str1.charAt(4)) false

Мой вопрос: как сделать так, чтоб ответ был

( - false () - true ()) - false

Ответы

▲ 2Принят
import java.util.Stack;

public class Application {
    private static final char OPENING_PARENTHESIS = '(';
    private static final char CLOSING_PARENTHESIS = ')';

    public static void main(String[] args) {
        final String str1 = "(())";
        final String str2 = "))((";
        final String str3 = "(()))";

        System.out.println(checkParentheses(str1));
        System.out.println(checkParentheses(str2));
        System.out.println(checkParentheses(str3));
    }

    private static boolean checkParentheses(CharSequence line) {
        final Stack<Character> stack = new Stack<>();

        for (int i = 0, length = line.length(); i < length; ++i) {
            final char ch = line.charAt(i);

            if (ch == OPENING_PARENTHESIS) {
                stack.add(OPENING_PARENTHESIS);
            } else if (ch == CLOSING_PARENTHESIS) {
                if (stack.isEmpty()) {
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }
}