package com.thealgorithms.stacks; import java.util.Stack; /** * The nested brackets problem is a problem that determines if a sequence of * brackets are properly nested. A sequence of brackets s is considered properly * nested if any of the following conditions are true: - s is empty - s has the * form (U) or [U] or {U} where U is a properly nested string - s has the form * VW where V and W are properly nested strings For example, the string * "()()[()]" is properly nested but "[(()]" is not. The function called * is_balanced takes as input a string S which is a sequence of brackets and * returns true if S is nested and false otherwise. * * @author akshay sharma * @author khalil2535 * @author shellhub */ final class BalancedBrackets { private BalancedBrackets() { } /** * Check if {@code leftBracket} and {@code rightBracket} is paired or not * * @param leftBracket left bracket * @param rightBracket right bracket * @return {@code true} if {@code leftBracket} and {@code rightBracket} is * paired, otherwise {@code false} */ public static boolean isPaired(char leftBracket, char rightBracket) { char[][] pairedBrackets = { {'(', ')'}, {'[', ']'}, {'{', '}'}, {'<', '>'}, }; for (char[] pairedBracket : pairedBrackets) { if (pairedBracket[0] == leftBracket && pairedBracket[1] == rightBracket) { return true; } } return false; } /** * Check if {@code brackets} is balanced * * @param brackets the brackets * @return {@code true} if {@code brackets} is balanced, otherwise * {@code false} */ public static boolean isBalanced(String brackets) { if (brackets == null) { throw new IllegalArgumentException("brackets is null"); } Stack bracketsStack = new Stack<>(); for (char bracket : brackets.toCharArray()) { switch (bracket) { case '(': case '[': case '<': case '{': bracketsStack.push(bracket); break; case ')': case ']': case '>': case '}': if (bracketsStack.isEmpty() || !isPaired(bracketsStack.pop(), bracket)) { return false; } break; default: return false; } } return bracketsStack.isEmpty(); } }