Сопоставление паразитов с использованием стека - PullRequest
0 голосов
/ 03 апреля 2020

Ниже приведен код, чтобы проверить, имеет ли данная строка сбалансированные паразиты или не использует стек Неправильный вывод для ввода «[]». Должно быть напечатано true, но результат, который я получаю - false.

import java.util.*;
class Solution{
    public static void main(String[] argh) {
        Scanner sc = new Scanner(System.in);
        Stack st = new Stack();
        boolean flag = true;
        while (sc.hasNext()) {
            String input = sc.next();
            //Complete the code
            for (int i = 0; i < input.length(); i++) {
                flag = false;
                if ((input.charAt(i) == '{') || (input.charAt(i) == '(') || (input.charAt(i) == '[')) {
                    st.push(input.charAt(i));
                    continue;
                }
                if ((input.charAt(i) == '}') || (input.charAt(i) == ')') || (input.charAt(i) == ']')) {
                    if (st.isEmpty()) {
                        flag = false;
                    } else {
                        char item = (char) st.pop();
                        if ((item == '(') && (input.charAt(i) == ')'))
                            flag = true;
                        if ((item == '{') && (input.charAt(i) == '}'))
                            flag = true;
                        if ((item == '[') && (input.charAt(i) == ']'))
                            flag = true;
                    }
                }
            }
            if (!st.isEmpty())
                flag = false;
            System.out.println(flag);
        }
    }
}

1 Ответ

0 голосов
/ 04 апреля 2020

Я воспроизвел ваш код ниже с несколькими изменениями (обозначенными в комментариях), которые должны заставить его работать.

import java.util.*;
class Solution{
    public static void main(String[] argh) {
        Scanner sc = new Scanner(System.in);
        Stack st = new Stack();
        while (sc.hasNext()) {
            // jim - Moved this to inside the loop.
            // Assume the input is good unless proven otherwise.
            boolean flag = true;
            String input = sc.next();
            //Complete the code
            // jim - Added the "&& flag == true" to exit if the input is bad
            for (int i = 0; i < input.length() && flag == true; i++) {
                // jim - Commented this out. We'll assume it's good. If the input
                // is found to be bad, we set the flag, and the
                // "&& flag == true" condition above will exit the loop.
                // flag = false; 
                if ((input.charAt(i) == '{') || (input.charAt(i) == '(') || (input.charAt(i) == '[')) {
                    st.push(input.charAt(i));
                    continue;
                }
                if ((input.charAt(i) == '}') || (input.charAt(i) == ')') || (input.charAt(i) == ']')) {
                    if (st.isEmpty()) {
                        flag = false;
                    } else {
                        char item = (char) st.pop();
                        // jim - here, check for not equal, and set to false.
                        if ((item == '(') && (input.charAt(i) != ')'))
                            flag = false;
                        if ((item == '{') && (input.charAt(i) != '}'))
                            flag = false;
                        if ((item == '[') && (input.charAt(i) != ']'))
                            flag = false;
                    }
                }
                else {
                    // jim - added this 'else' clause.
                    // If there's any character other than [{()}], then it's
                    // bad input.
                    flag = false;
                }
            }
            if (!st.isEmpty())
                flag = false;
            System.out.println(flag);
        }
    }
}

Есть некоторые улучшения, которые вы могли бы внести в свой код, но эти несколько изменений я документально должно заставить его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...