diff --git a/DataStructures/Stacks/BalancedBrackets.java b/DataStructures/Stacks/BalancedBrackets.java
index 8063c5105..ea342219c 100644
--- a/DataStructures/Stacks/BalancedBrackets.java
+++ b/DataStructures/Stacks/BalancedBrackets.java
@@ -1,10 +1,8 @@
-package data_structures.Stacks;
+package DataStructures.Stacks;
-import java.util.Scanner;
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
@@ -15,71 +13,69 @@ import java.util.Stack;
* returns true if S is nested and false otherwise.
*
* @author akshay sharma
- * @date: 2017-10-17
* @author khalil2535
- *
+ * @author shellhub
*/
class BalancedBrackets {
/**
+ * Check if {@code leftBracket} and {@code rightBracket} is paired or not
*
- * @param s
- * @return
+ * @param leftBracket left bracket
+ * @param rightBracket right bracket
+ * @return {@code true} if {@code leftBracket} and {@code rightBracket} is paired,
+ * otherwise {@code false}
*/
- static boolean is_balanced(String s) {
- Stack bracketsStack = new Stack<>();
- char[] text = s.toCharArray();
- for (char x : text) {
- switch (x) {
- case '{':
- case '<':
- case '(':
- case '[':
- bracketsStack.push(x);
- break;
- case '}':
- if (!bracketsStack.empty() && bracketsStack.pop() == '{') {
- break;
- } else {
- return false;
- }
- case '>':
- if (!bracketsStack.empty() && bracketsStack.pop() == '<') {
- break;
- } else {
- return false;
- }
- case ')':
- if (!bracketsStack.empty() && bracketsStack.pop() == '(') {
- break;
- } else {
- return false;
- }
- case ']':
- if (!bracketsStack.empty() && bracketsStack.pop() == '[') {
- break;
- } else {
- return 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 bracketsStack.empty();
+ return false;
}
/**
+ * Check if {@code brackets} is balanced
*
- * @param args
- * @TODO remove main method and Test using JUnit or other methodology
+ * @param brackets the brackets
+ * @return {@code true} if {@code brackets} is balanced, otherwise {@code false}
*/
- public static void main(String args[]) {
- try (Scanner in = new Scanner(System.in)) {
- System.out.println("Enter sequence of brackets: ");
- String s = in.nextLine();
- if (is_balanced(s)) {
- System.out.println(s + " is balanced");
- } else {
- System.out.println(s + " ain't balanced");
+ 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 '{':
+ bracketsStack.push(bracket);
+ break;
+ case ')':
+ case ']':
+ case '}':
+ if (!(!bracketsStack.isEmpty() && isPaired(bracketsStack.pop(), bracket))) {
+ return false;
+ }
+ break;
+ default: /* other character is invalid */
+ return false;
}
}
+ return bracketsStack.isEmpty();
+ }
+
+
+ public static void main(String[] args) {
+ assert isBalanced("[()]{}{[()()]()}");
+ assert !isBalanced("[(])");
}
}