ExpressionChangedAfterItHasBeenCheckedError один маршрут два компонента

Ответ Ganesan выше неверен, и StackOverflow не позволяет мне прокомментировать или отредактировать его сообщение. Итак, ниже приведен правильный ответ. Ganesan имеет неправильную обратную сторону "[" и отсутствует проверка стека isEmpty ().

Приведенный ниже код вернет true, если фигурные скобки должным образом совпадают.

public static boolean isValidExpression(String expression) {
    Map<Character, Character> openClosePair = new HashMap<Character, Character>();
    openClosePair.put(')', '(');
    openClosePair.put('}', '{');
    openClosePair.put(']', '[');

    Stack<Character> stack = new Stack<Character>();
    for(char ch : expression.toCharArray()) {
        if(openClosePair.containsKey(ch)) {
            if(stack.isEmpty() || stack.pop() != openClosePair.get(ch)) {
                return false;
            }
        } else if(openClosePair.values().contains(ch)) {
            stack.push(ch); 
        }
    }
    return stack.isEmpty();
}
0
задан IleNea 16 January 2019 в 22:58
поделиться